![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Vex |
|
|||
![]() кацапосрачмученiкъ ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3103 Регистрация: 28.3.2002 Где: strawberry fields Репутация: нет Всего: 88 |
Перед мной стоит задача написать каталог товаров с возможностью выбрать для каждой категории товара свои параметры. Допустим для жестких дисков это будет: наименование, цена, емкость.
для мониторов наименование, цена, диагональ. При чем пользователь может сам создавать новые категории и названия новых реквизитов. Сразу скажу, что число реквизитов для любого товара не должно превшать 20 например параметров. Таблица "Товары": ИД ИД_Категории Наименование Цена Значение параметра 1 ... Значение параметра 20 Таблица "Структура каталога" Ид Наименование группы (мониторы, жесткие диски и т.д.) Родитель (чтобы построить дерево) Название параметра 1 ... Название параметра 20 Понятное дело, если лишние параметры будут путыми, их можно не выводить. Это решение можно заменить лучшим? База MySQL, вложеность дерева 0-5, асортимент товара 3000. СУВ. Добавлено через 1 минуту и 7 секунд То есть в товарах мы храним значения параметров, а в групах их название ![]() -------------------- Слава Україні. |
|||
|
||||
WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: нет Всего: 8 |
параметры в xml, нэ?
или отдельная таблица под параметры, под группировку параметров, а в основной ссылка на группу Это сообщение отредактировал(а) WolfON - 5.9.2007, 22:49 |
|||
|
||||
Golda |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 6 Всего: 42 |
2 отдельных таблицы
parameter_names (id, catalog_structure_id, name) parameters (id, product_id, parameter_name_id, value) Это лучше, чем xml, поскольку во всех полях базы будут храниться атомарные значения. Vex, проблема Вашей структуры:
-------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 9 Всего: 146 |
Vex, зависит от того, какой функционал вы будете реализовывать. Т.е. будете-ли искать/фильтровать товары по этим параметрам или только выводить. Так же важно насколько критичной для вас выборка и насколько частое обновление параметров и типов параметров.
Часто самый грубый вариант "в лоб" бывает самым эффективным, т.ч. ваш вариант, имхо, будет самым простым и быстрым. Вариант WolfON самый простой. Минимальная нагрузка на БД и никаких ограничений по количиству и типу параметров и вроде бы все замечательно... но вот с поиском и фильтрацией будут проблемы (вот если бы БД была MSSQL 2005, то...). Вариант Golda очень гибкий и универсальный, единственное, что надо учесть - это то что у всех параметров будет текстовый тип, что приведет к проблемам сортировки по числовым параметрам и прочим манипуляциям с данными. Так же в этом варианте будет очень сложная выборка (представляете какой запрос будет с мапингом 20 таблиц(параметров)!) и сложное обновление/добавление данных (тоже тяжело следить за всеми данными когда они все в куче...). Но хотелось бы все-таки развить этот вариант ![]()
|
|||
|
||||
Vex |
|
|||
![]() кацапосрачмученiкъ ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3103 Регистрация: 28.3.2002 Где: strawberry fields Репутация: нет Всего: 88 |
А можно текстовые поля отфильтровать как числовые? Это тяжело будет?
-------------------- Слава Україні. |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 9 Всего: 146 |
||||
|
||||
ewolf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 15.8.2006 Где: г. Москва Репутация: 2 Всего: 18 |
А может быть вместо нескольких таблиц parameters с колонкой value разных типов, сделать одну таблицу, но в ней несколько полей value разных типов? Например, value_int (типа Integer), value_double (типа double), value_string (типа string)
|
|||
|
||||
Golda |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 6 Всего: 42 |
Я бы обошлась использованием CAST при выборках и структура упроститься. Тригер при добавлении - хорошая идея. А по поводу foreign key, sTa1kEr, Вы меня удивили. Это настолько само собой разумеющаяся вещь. Вы же не указываете отдельно, что первичные ключи желательно проставить
-------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
|||
|
||||
sTa1kEr |
|
||||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 9 Всего: 146 |
Да, можно бы и так сделать. Минус только один - 2 колонки из 3х будут всегда null.
Но тогда не будет работать update через вьюшку.
Да, конечно ![]() |
||||
|
|||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |