Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> структура БД товары - свойства товаров, проблема со свойствами товаров 
:(
    Опции темы
sergey_85
Дата 22.1.2009, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 445
Регистрация: 17.4.2007
Где: Россия, Челябинск

Репутация: нет
Всего: 1



Привет! 
Появилась такая вот задачка создать БД товары и их свойства (как в интернет магазине)
Только есть небольшая проблема с таблицей свойства товаров.

Свойства могут быть списком (да/нет, страна-производитель ), целым числом (вес, габариты), строкой короткой/длинной (название/описание).

Как все это учесть и запихнуть в БД.

Код

Камера 3.2 (число)
Ик-порт да/нет (список)
Стран-призводитель Китай (список)




--------------------
A good design always pays off.
PM MAIL   Вверх
Zloxa
Дата 22.1.2009, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Код

Справочник_свойств
  ид_свойства, PK
  тип_свойства
  размерность -- ограничение длинны для строк

Списки_свойств
  ид_свойства FK Справочник_Свойств(ид_справочника)
  ид_списка
  значение
  PK(ид_свойства,ид_списка) 

Списки_свойств_Товаров
  ид_товара  FK товары(ид_товара)
  ид_свойства FK Справочник_Свойств(ид_справочника) -- этот FK можно не ставить
  ид_списка
  PK(ид_товара,ид_свойства,ид_списка) -- если задаваемые списком свойства могут являть собой множества
                                      -- (ид_товара,ид_свойства), если нет
  FK (ид_свойства,ид_списка) references Списки_Свойств(ид_свойства,ид_списка)

Символьные_свойства_Товаров
  ид_товара FK товары(ид_товара)
  ид_свойства FK Справочник_Свойств(ид_справочника)
  PK(ид_товара,ид_свойства)
  значение

Числовые_свойства_Товаров -- Этот справочник можно не делать, любое число запросто преобразуется в строку, контроль корректности производить на уровне приложения. тоже и с датами
  ид_товара FK товары(ид_товара)
  ид_свойства FK Справочник_Свойств(ид_справочника)
  PK(ид_товара,ид_свойства)
  значение


недостатки такой модели тут

Не смотря на минусы, справочник номенклатуры, одна из немногих областей применения, где EAV применять целесообразно.
Однако есть ограничение области применения. Есть описательные свойства,- свойства которые желательно показать пользователю, но есть и системные свойства - свойства, на которые опирается функционал системы, исходя из которых строятся отчеты, от значений которых зависит бизнес логика. Так вот системные свойства, с помощью такой модели, лучше не реализовывать.

Это сообщение отредактировал(а) Zloxa - 23.1.2009, 17:23


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
vladimir74
Дата 22.1.2009, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 28.11.2006

Репутация: нет
Всего: 3



все смешалось, люди кони....
берем продукт, смотрим на него пристальным взглядом, и понимаем, что любой продукт можно имеет определенные данные.
Номер продукта (от производителя или от посредника или свой номер в системе)
описание продукта (часто делят на краткое и полное описание)
страна изготови
фирма изготовитель
EAN
Баркод
вес, длина, ширина, высота
вобщем существует еще множество полей, которые являются всегда отдельными полями в таблице products. НО
камера 3.2 будет делиться только в случае если ты делаешь базу камер и тебе надо будет сортировать по пикселям.
а вообще это скорее вссего часть краткого описания продукта...

--------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ.
PM MAIL   Вверх
sergey_85
Дата 22.1.2009, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 445
Регистрация: 17.4.2007
Где: Россия, Челябинск

Репутация: нет
Всего: 1



Цитата

камера 3.2 будет делиться только в случае если ты делаешь базу камер и тебе надо будет сортировать по пикселям.


Да vladimir74,  мне и нужен потом поиск по параметра и подбор по параметрам иначе бы я не мучился  smile и затолкал бы все это скажем -  в мемо поле.

*а вообще сама база будет содержать разные категории товаров от болтов до различных измерительных приборов.

Это сообщение отредактировал(а) sergey_85 - 22.1.2009, 20:45


--------------------
A good design always pays off.
PM MAIL   Вверх
vladimir74
Дата 23.1.2009, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 28.11.2006

Репутация: нет
Всего: 3



Цитата(sergey_85 @  22.1.2009,  18:43 Найти цитируемый пост)
а vladimir74,  мне и нужен потом поиск по параметра и подбор по параметрам иначе бы я не мучился

вообще то это все очень индивидуально. Проще посмотреть по каким критериям т будешь делать сортировки. И насколько они часто будут использованы. При этом если в твоей базе будут и болты и видеокамеры и еще что то, то описать все точные свойства практически невозможно. Т.к. ты все равно не знаешь какие свойства нужны будут следующему товару.
Тогда лучше ориентироваться на глобальные свойства (те что есть всегда), а поиск и сортировки организовывать программно. Плюс к этому часто используются dummy поля. Которые так раз и служат для работы с какими то либо заранее неизвестными свойствами...
Чаще всего эти поля являются строковыми (так как их проще пкркводить в другие). Или же организуют так, чтоб поля можно было легко вводить в обиход в процессе работы. (Дезайнер форм в пользовательском интерфейсе)
--------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ.
PM MAIL   Вверх
sergey_85
Дата 23.1.2009, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 445
Регистрация: 17.4.2007
Где: Россия, Челябинск

Репутация: нет
Всего: 1



Хорошо, vladimir74, поиск я организую общий по наименованию товара, также внесу в таблицу товары его общие сво-ва (например картинка, описание краткое/подробное, артикул ну т.д.) Подбор товара конечно же у всех свои параметры и их куча поэтому делаться будет безусловно программно (по заранне известному шаблону для опред. группы товаров)

Что касается строковых полей ну вот например какую длину взять такого поля 
если я хочу хранить путь до файла с инструкцией по применению и дату поступления в продажу в таких полях  т.е. я хотел бы узнать оптимальный размер поля (50/256/1024 символов) Кто как думает?

Это сообщение отредактировал(а) sergey_85 - 23.1.2009, 11:33


--------------------
A good design always pays off.
PM MAIL   Вверх
vladimir74
Дата 23.1.2009, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 28.11.2006

Репутация: нет
Всего: 3



Цитата(sergey_85 @  23.1.2009,  09:32 Найти цитируемый пост)
т.е. я хотел бы узнать оптимальный размер поля (50/256/1024 символов) Кто как думает?

тут могу сказать только из своей практики...
64 (50) - маленькое поле зато хорошо себя ведет при поисках и сортировках
128 (100) - поля небольших орисаний
256 (250) - я не пользуюсь но встречал например в Online Shop 
дальше BLOB  поля.

Zloxa, 
как то я пропустил твой пост :( . Модель интересная но ИМХО сложно реализуемая и гдавное при большом колличестве товара с разными свойствами сравнительно медленая. (Во всяком случае на первый взгляд)

P.S. там где я работаю сейчас, мы не пользуемся dummy. У нас есть свой дезайнер форм (хотя его и стоит подправить :( ). И по желанию заказчика мы добовляем поля к базе. Сами же запросы либо строятся динамически во время открытия формы либо изначально 
Код

select * from ...

C dummy полями я сталкивался лет 5 назад, когда работал с Navision. Основная проблема с ними - нужна очень четкая документация чтоб не запутаться!!!!
--------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ.
PM MAIL   Вверх
Zloxa
Дата 23.1.2009, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(vladimir74 @  23.1.2009,  12:02 Найти цитируемый пост)
сложно реализуемая и гдавное при большом колличестве товара с разными свойствами сравнительно медленая

Минусы были мной указаны.
Цитата(vladimir74 @  23.1.2009,  12:02 Найти цитируемый пост)
dummy

Подобные схемы(с гибким набором атрибутов), обычно применяют для того, чтобы минимизировать затраты на модернизацию ПО, при изменении бизнес требований к критериям фильтрации справочников.

Если мы изменили назначение dummy поля, нам по всякому надо модифицировать клиентское ПО, для того, чтобы пользователь мог им пользоваться, а так же все фильтры, где использовалось старая трактовка этого поля (если таковая была) и не использовалась новая.
В клиент-серверных приложениях, наращивание версии клиента - имеет наибольший вес в стоимости модернизации.
Т.о.  схема с dummy полями не позволяет нам в достаточной степени быть экономными. И, по трудозатратам модернизации, вполне сопоставима с добавлением нового поля в таблице.

К тому же топикстартером заявлена потребность в задании списка допустимых значений атрибутов.

Что касается медленности... отбор по не индексированному dummy полю врядли будет быстрее чем по индексированному полю "значение" таблицы Символьные_свойства_Товаров из моего примера. А индексировать все dummy поля.... неоправданно



Это сообщение отредактировал(а) Zloxa - 23.1.2009, 14:17


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
vladimir74
Дата 23.1.2009, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 28.11.2006

Репутация: нет
Всего: 3



Цитата(Zloxa @  23.1.2009,  11:54 Найти цитируемый пост)
Т.о.  схема с dummy полями не позволяет нам в достаточной степени быть экономными. И, по трудозатратам модернизации, вполне сопоставима с добавлением нового поля в таблице.

согласен...

Цитата(Zloxa @  23.1.2009,  11:54 Найти цитируемый пост)
Подобные схемы(с гибким набором атрибутов), обычно применяют для того, чтобы минимизировать затраты на модернизацию ПО, при изменении бизнес требований к критериям фильтрации справочников.

мне кажется что ПО все равно придется видоизменять как минимум для показа значений нового свойства. (Или же опять возвращаемся к дезайнеру форм, позволяя пользователю самому добавлять/убирать новые поля на форме)

Цитата(Zloxa @  23.1.2009,  11:54 Найти цитируемый пост)
Что касается медленности... отбор по не индексированному dummy полю врядли будет быстрее чем по индексированному полю "значение" таблицы Символьные_свойства_Товаров из моего примера. А индексировать все dummy поля.... неоправданно

если оставлять dummy неиндексированными - то 99% с тобой согласен, но если все равно нам приходится тем или другим способом делать изменения, мы можем сразу проиндексировать новое задействованное поле.
Цитата(Zloxa @  23.1.2009,  11:54 Найти цитируемый пост)
Если мы изменили назначение dummy поля, нам по всякому надо модифицировать клиентское ПО, для того, чтобы пользователь мог им пользоваться, а так же все фильтры, где использовалось старая трактовка этого поля (если таковая была) и не использовалась новая.

а вот это точно надо запретить!! один клиент не имеет права использовать поле сначала для одного а потом для другого свойства. Иначе бед не наберешься. Я кстати написал что при использовании dummy нужно очень хорошо все документировать...

P.S. если спросить меня - мне больше по нутру способ с добовлением полей в готовую систему чем способ с dummy. Хотя как я уже говорил, даже некоторые монстры не глумятся пользоваться этим способом. А вот хорошо это или плохо - решать надо самому.
Насчет твоего способа - он в принципе интересен и в описании достаточно прост (его проблемы ты и в правду привел сам ;) ). Хотя честно не знаю стоит ли в данном случае "овчинка выделки"... 
Все таки как показывает практика (как минимум  моя) основное колличество пользователей используют в конечном варианте определенное колличество глобально известных свойств товара. И новые поля приходится вводить очень редко.... Но это только моя практика...

Это сообщение отредактировал(а) vladimir74 - 23.1.2009, 15:05
--------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ.
PM MAIL   Вверх
Zloxa
Дата 23.1.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(vladimir74 @  23.1.2009,  15:04 Найти цитируемый пост)
можем сразу проиндексировать новое задействованное поле

И сколько индексов нам при том придется содержать?
Цитата(vladimir74 @  23.1.2009,  15:04 Найти цитируемый пост)
мне кажется что ПО все равно придется видоизменять как минимум для показа значений нового свойства

Использующие такую схему системы, как правило, отображают UDA(User Defined Attributes) как detail таблицу к справочнику. Т.е. показывают не для всех позиций а только для конкретных.
Безусловно бизнес-пользователям это не нравится.
А фигли делать?
Цитата(vladimir74 @  23.1.2009,  15:04 Найти цитируемый пост)
а вот это точно надо запретить!!

Если знаешь что нельзя, но очень хочется, - то можно. smile)
Цитата(vladimir74 @  23.1.2009,  15:04 Найти цитируемый пост)
мне больше по нутру способ с добовлением полей

Мне тоже. Но есть и реалии жизни.
Например, если решение тиражное, то далеко не всегда есть возможность добавить в табличку колоночку. 
Цитата(vladimir74 @  23.1.2009,  15:04 Найти цитируемый пост)
даже некоторые монстры не глумятся пользоваться этим способом

Наверно таки "гнушаются", потому как "глумиться" это чуть из другой оперы. smile (глумлюсь smile)

Мой пример тоже "слизан" с весьма пафосной системы. smile


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
vladimir74
Дата 23.1.2009, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 28.11.2006

Репутация: нет
Всего: 3



Цитата(Zloxa @  23.1.2009,  13:41 Найти цитируемый пост)

Наверно таки "гнушаются", потому как "глумиться" это чуть из другой оперы. smile (глумлюсь smile)

хм видать  я начал забывать русский  smile надо срочно своих учить русскому, а то так все забуду ..... Но уже таки да смущен....

Цитата(Zloxa @  23.1.2009,  13:41 Найти цитируемый пост)

И сколько индексов нам при том придется содержать?

по нормальному - только задействованные в данной системе

Цитата(Zloxa @  23.1.2009,  13:41 Найти цитируемый пост)
Использующие такую схему системы, как правило, отображают UDA(User Defined Attributes) как detail таблицу к справочнику. Т.е. показывают не для всех позиций а только для конкретных.
Безусловно бизнес-пользователям это не нравится.

вот именно. А при условии что программ систем работы предприятий сегодня хватает (не то что было лет 10 тому назад  smile ) то приходится угождать пользователям. Уж такая у нас селяви  smile 

Цитата(Zloxa @  23.1.2009,  13:41 Найти цитируемый пост)
Если знаешь что нельзя, но очень хочется, - то можно. smile)

можно все, как минимум один раз... но если знаешь что это отрава - то лучше выбросить  smile 

Цитата(Zloxa @  23.1.2009,  13:41 Найти цитируемый пост)
Мне тоже. Но есть и реалии жизни.
Например, если решение тиражное, то далеко не всегда есть возможность добавить в табличку колоночку. 

возможно, хотя если мы решились на такую нелегкую задачу, то можно и почесать головку и написать визуальный редактор ДБ таблиц. Знаю что это не там тоже есть много проблем. Но и задачу нам не из простейших поставили....
Хотя начиная строить свой редактор - нам придется воспользоваться твоей или похожей схемой (никуда не денешься). Но зато это юудет касаться только редактора а не всю программу. Но это мое мнение

Цитата(Zloxa @  23.1.2009,  13:41 Найти цитируемый пост)
Мой пример тоже "слизан" с весьма пафосной системы. smile 

вот именно по этому каждый выбирает то, что ему удобней. И вполне уверен что по описанной тобой схеме работает много софта, и программисты сидят и когда вылазят какие то проблемы матерят того кто придумал работать по этой схеме. Так же как и программисты других схем матерятся сталкиваясь с проблемами у себя. (И я такой же.... вот наал писать, и на полубукве меня отвлекли...)

Это сообщение отредактировал(а) vladimir74 - 23.1.2009, 17:21
--------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ.
PM MAIL   Вверх
Zloxa
Дата 23.1.2009, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(vladimir74 @  23.1.2009,  17:20 Найти цитируемый пост)
но если знаешь что это отрава - то лучше выбросить 

Змеиный яд - отрава, но им лечатся smile
Цитата(vladimir74 @  23.1.2009,  17:20 Найти цитируемый пост)
приходится угождать пользователям

Я, лично, предпочел бы убедить пользователя, нежели угодить ему.
"Хотелки" заказчика достаточно быстро оптимизируются, когда ему выставляется смета.
Или же ему выставляется список рисков, с просьбой поставить подпись, что он ознакомлен с ними, но не меняет своего решения.
Цитата(vladimir74 @  23.1.2009,  17:20 Найти цитируемый пост)
матерят того кто придумал работать по этой схеме

Кто-то материт, а кто-то наматывает на ус, и откладывает в долгосрочную память, для того чтобы быть более убедительным при следующем убеждении smile
Я видел четыре или пять схем классификаторов номенклатуры. Приведенную выше, я нахожу наиболее простой жизнеспособной. Но ни в коем случае не единственной.
Цитата(vladimir74 @  23.1.2009,  17:20 Найти цитируемый пост)
редактор ДБ таблиц

Это уж совсем черезчур. ХОтя примеров предостаточно. Взять тот же 1С. На скольки там клиентах он встает враскоряку?
А тем не менее ведь жизнеспособен то, и спросом пользуется. Потому как гибкостью обеспечена тиражируемость.

Это сообщение отредактировал(а) Zloxa - 23.1.2009, 18:32


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0637 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.