powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Многоуровневый справочник товаров
28 сообщений из 28, показаны все 2 страниц
Многоуровневый справочник товаров
    #33037336
CubeRoot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, дамы и господа.
Прекрасно понимаю, что решение моего вопроса лежит на поверхности, но все-тки попытаюсь спросить.
Имеется N категорий товаров ( групп) - родителей
в Каждой категории может быть от 0 до N подгрупп, и так далее.
Своего рода справочник товаров по примеру 1С.
товары могут находится или в родительской группе или в одной из подгрупп.
Необходим подход по проектированию такого рода БД.
Причем хотелось бы предусмотреть перенос как товаров так и подгрупп, сохранив целостность БД ( в задумке - журнал счетов, в котором будут фигурировать товары из вышеуказанной БД).
ДАнные базы предполагается обрабатывать под MSSQL.

PS: ЗАранее спасибо за ответ
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33037416
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
categories
- id
- parent_id
- name
- ...

products
- id
- category_id
- name
- ...
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33037419
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дарево?
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33037421
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СерегаДарево?
В смысле дерево.
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33037427
CubeRoot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДА - вариант дерева
но с предполагаемой большой вложенностью подгрупп.
можно ли избежать роста таблиц с подгруппами ?
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33037498
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CubeRootможно ли избежать роста таблиц с подгруппами ?
Каких таблиц? Всего одна таблица. Товаром является только то, у чего нет "потомков". Остальное группы/подгруппы.
Только геморойно это все - ужас.
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33037782
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СерегаТолько геморойно это все - ужас.
Некоторое время назад тут отгремел огромный топик на тему "деревья в MSSQL не хуже, чем в Oracle" :)

Но вообще говоря для справочника товаров и подобных вещей - то есть для таблиц, ограниченных, например, полумиллионом записей - connect by таки весьма удобная штука.
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33037825
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для прочтения : тынц

Best regards,
Dnico
.
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33037830
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerНо вообще говоря для справочника товаров и подобных вещей - то есть для таблиц, ограниченных, например, полумиллионом записей - connect by таки весьма удобная штука.
Я имел в виду геморой другого рода. Когда например некий "товар" становится "группой". Типа была "Просто Обувь", а после захотелось сделать "Детскую", "Женскую" и т.д. Или захотелось выделить цвет товара. Но красный может быть и детским и железным и каким угодно еще.
Т.е. когда нет четких критериев по классификации, надо быть очень осторожным при работе с таким классификатором. Тем более, что изменять его юзер может практически постоянно.
А получить деревянную цепочку - это дело техники на любой БД.

Разумеется все исключительно ИМХО.
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33038268
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ имел в виду геморой другого рода. Когда например некий "товар" становится "группой". Типа была "Просто Обувь", а после захотелось сделать "Детскую", "Женскую" и т.д. Или захотелось выделить цвет товара. Но красный может быть и детским и железным и каким угодно еще.
Где тут геморрой? Не вижу. Как решат использовать, так и будет. Захотят, чтобы красные детские спортивные тапочки были в группах "Красные", "Спортивные", "Детские" и "Тапочки" - будут везде. Захотят в одном - будут в одном. Это определяет только административно закрепленные методы учета и работы, что касается самой программы - ей по барабану, где и что лежит: есть группы, есть товары, товары в группах, все.

-- Tygra's --
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33038314
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tygraГде тут геморрой? Не вижу.
Ну и хорошо.
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33038835
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СерегаЯ имел в виду геморой другого рода. Когда например некий "товар" становится "группой". Типа была "Просто Обувь", а после захотелось сделать "Детскую", "Женскую" и т.д. Или захотелось выделить цвет товара. Но красный может быть и детским и железным и каким угодно еще.
Ээ.. По-моему, Вы говорите о чем-то не имеющем отношения к реальному миру.

Товар - не может стать группой, если говорить о нашей реальности. Товар - это объект учета; пришло сто двадцать пар ботинок детских, артикул такой-то, код товара такой-то, код партии такой-то, прочее такое-то так-то. Группа - это некое виртуальное понятие, абстракция, придуманное для облегчения работы мозга.

Группы могут быть перестроены, и товар - отнесен той или иной группе, а то и куче групп сразу. Запросто. На самом товаре это никак не сказывается.

Если проектировщик спутал разные понятия - это странно и нехорошо, но мне скорее интересно - где он взял входные данные. Я в принципе готов представить некую аналитическую систему, на входе которой данные огрубляются до "просто обувь", а потом клиент вдруг хочет более подробный анализ. Но и там товар группой не становится, просто достраивается дерево групп. Ну и может потребоваться заново импортнуть данные.
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33038928
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЭэ.. По-моему, Вы говорите о чем-то не имеющем отношения к реальному миру.
Похоже да, перегрелся я, сбоить начал.
Я почему то (черт его знает почему, наверное из-за соседней ветки про деревья или еще почему) решил, что и товары и группы будут в одной таблице (типа файловая система). Это конечно нонсенс. Сори.
Но даже если принять, что в дереве хранятся только группы, то все равно обслуживание такой системы намного сложнее, чем с однозначной классификацией.
Я так полагаю, что товар должен соотноситься только с конечной подгруппой. Может быть с несколькими, но все равно с конечными. Иначе смыл детализации теряется.
Когда вводится новый уровень детализации (дробится предыдущий) товар надо разнести по новым уровням. Автоматом это не сделаешь.
Я не говорю, что это невозможно сделать. Можно. Но дополнительный геморой на лицо (если так можно выразиться ). Поэтому без особой нужды, я бы на это не подписАлся.
Все исключительно ИМХО.
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33039080
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНо даже если принять, что в дереве хранятся только группы, то все равно обслуживание такой системы намного сложнее, чем с однозначной классификацией.
Я так полагаю, что товар должен соотноситься только с конечной подгруппой. Может быть с несколькими, но все равно с конечными. Иначе смыл детализации теряется.
Когда вводится новый уровень детализации (дробится предыдущий) товар надо разнести по новым уровням. Автоматом это не сделаешь.
Я не говорю, что это невозможно сделать. Можно. Но дополнительный геморой на лицо (если так можно выразиться ). Поэтому без особой нужды, я бы на это не подписАлся.
Ну когда уровень детализации дробится, то хочешь не хочешь, придется товар разбрасывать - это тоже не задача программистов а задача управления. Причем тут вообще это? Ну захотели раздробить - раздробили. Что сразу бы раздробили, что потом, одно и то же.
Если говорить о том, куда девать товары, то все просто тут:
когда создается подргруппа у группы, а эта группа была конечной и на ней висят товары, то создается еще одна подгруппа, например "Буффер", привязывается к этой же группе и все товары из группы переносятся в этот "Буффер". Итого мы имеем чистую уже не конечную группу, созданную подгруппу и автоматически созданную подгруппу, в которую перенесли все товары.
Либо просто все товары переносим в новую созданную подгруппу.
В общем, это как захочется.

-- Tygra's --
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33039293
Фотография vma_mnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант

Группы в одной таблице, ограничили число вложений до 9 (10 это сам товар)

Товар в другой. Везде в документах код товара.

А в справочнике товар и любые группы, подгруппы могут как угодно соединяться, двигаться и т.д. На целостность данных это не влияет, только на аналитику.

Кроме того, для каждого товара можно ввести еще произвольно до 10 признаков классификации (любые).

Получилось неплохо. Если, например, в качестве признака выбран цвет, то можно выбрать только красный товар, ну и так далее.
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33039295
Фотография PVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Серега... перегрелся я, сбоить начал.Везет же людям, а у нас холодно.
СерегаЯ почему то (черт его знает почему, наверное из-за соседней ветки про деревья или еще почему) решил, что и товары и группы будут в одной таблице (типа файловая система). Это конечно нонсенс. Сори.Почему же сразу нонсенс. Выше по топику обсуждается классификация товаров. Разные направления классификации харнятся в разных деревьях, вычячими вершинами которых являются товары.

Но древовидной может быть и сама номенклатура. Например, компьютер - 1-й уровень, монитор, ситемный блок, клавиши, мыша - 2-й уровень, корпус, материнка, винт, ... - третий уровень и т.д. Вершина каждого уровня имеет свой код и может быть предметом учета.

Это красиво теоретически. Есть практическая реализация, например, в IT предприятии. Лично я не сторонник такой организации номенклатуры. Пока она маленькая, все красиво. Но когда разрастается - теряется основное преимущество дерева - наглядность структуры. Ну а все деревянные недостатки остаются.

Автор топика может уточнить задачу, что именно требуется.
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33040146
CubeRoot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, спасибо что откликнулись.
Попытаюсь конкретизировать свой вопрос.

Итак. компания занимается поставкой оборудования для тепло-водоснабжения и соответственно запчастей.

В нашей 1C реализован справочник товаров. Но так как отделу логистики работать не с руки в таком "шедевре программирования", решил для себя написать программу по MSSQL. Клиент будет на VB.
ЗАдача следующая
Имеем несколько сот тысяч наименований товаров, разных категорий и предназначений
Например:
Водонагреватели - (родитель в дереве)
-Сименс ( подгруппа)
-Аристон ( подгруппа)
-Запасные части ( подгруппа)
-Комплектующие ( подгруппа)

Далее в любой из подгрупп заносится соответствующий товар, который однозначно идентифицируется по артикулу.
При приеме заказа - со списка товаров - выбирается позиция и заносится в счет, который затем преобразуется в заказ поставщику и т.д.
Соответственно будет журнал счетов, в котором ссылками по ключу будет фигурировать та или иная позиция в счете.
Ситуация тут вот в чем - товар может быть не использован в дальнейшем - например снят с производства, но в архиве журнала счетов он должен проходить, даже если прошло год или два ( как вариант придумал завести лишнее поле с ЛОгическим типом - ДА - товар виден, НЕТ - товар не виден при запросе)
А вот товары, подгруппы могут добавляться, или переноситься в другие
группы ( как пример - решил разделить группы товаров на РОссийского или Импортного производства)
Каким образом идентифицировать подпод.....подгруппу к нужной группе и соответственно, каким образом соотнести товар к этой конечной группе?
PS: мозги сломал уже ))
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33040223
YBW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBW
Гость
CubeRootИмеем несколько сот тысяч наименований товаров, разных категорий и предназначений
Например:
Водонагреватели - (родитель в дереве)
-Сименс ( подгруппа)
-Аристон ( подгруппа)
-Запасные части ( подгруппа)
-Комплектующие ( подгруппа)



ошибочная структура - чреватый многими проблемами подход...

во первывых - чем запасные части отличаются от комплектующих?
во вторых - чем Сименс отличается от Аристона

классический вариант выглядит так

изделия>узлы>>детали
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33040233
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все же не очень понятно, зачем такая... эээ... ненормализованная схема.


А, скажем, "мобильные телефоны" у вас тоже отдельный корень в дереве и в нем подгруппа Siemens ? И потом когда вам (вдруг) понадобится отыскать все товары сименса, то-то ваш дба попляшет с бубном ...

А, запчасти от Сименса не могут быть? ( а если могут, в какую подгруппу вы поместите товар?)

На мой взгляд вам разумнее было бы завести отдельную таблицу "группы" (там "Водонагреватели", "Комплектующие" "Запччасти" и еще что вы придумаете), и когда вам надо учесть краник от самовара, вы его добавляете (скажем) в группы "Запчасти" "Самовары" "Отечественные товары" "Made in Тула" .

А производителя (сименс/alcаtel) лучше бы вынести в отдельный справочник.
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33040244
CubeRoot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YBW CubeRootИмеем несколько сот тысяч наименований товаров, разных категорий и предназначений
Например:
Водонагреватели - (родитель в дереве)
-Сименс ( подгруппа)
-Аристон ( подгруппа)
-Запасные части ( подгруппа)
-Комплектующие ( подгруппа)



ошибочная структура - чреватый многими проблемами подход...

во первывых - чем запасные части отличаются от комплектующих?
во вторых - чем Сименс отличается от Аристона

классический вариант выглядит так

изделия>узлы>>детали

Запасные части - например ( прокладки, шайбы)
Комплектующие - группы безопасности, манометры - в общем эт самостоятельные агрегаты
Водонагреватели разбиты по группам - для удобства - один брэнд - одна группа
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33040271
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХренА производителя (сименс/alcаtel) лучше бы вынести в отдельный справочник.
Я бы рассмотрел задачу чуть шире - хочется классифицировать товар по нескольким независимым категориям. Безусловно, если категории жестко заданы - можно сделать справочник производителей (кстати, тоже иерархический - например, по странам, или по разным производствам внутри одного производителя), можно сделать справочник по другой-третьей-пятой категории. Если же сам набор классифицирующих признаков нечеткий - не остается ничего как только заложиться на этот подход; сделать возможность наличия нескольких альтернативных иерархий. Соответственно, стирмашка будет в подгруппе "стирмашки" группы "бытовая техника" и одновременно в подгруппе "аристон" группы "европейские производители". В последней - вместе с каким-нибудь электродвигателем к себе же, который одновременно входит в группу "запчасти / стирмашки" или еще что-нибудь в том же духе.
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33040349
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Соответственно, стирмашка будет в подгруппе "стирмашки" группы "бытовая техника" и одновременно в подгруппе "аристон" группы "европейские производители". В последней - вместе с каким-нибудь электродвигателем к себе же, который одновременно входит в группу "запчасти / стирмашки" или еще что-нибудь в том же духе.

А если не alcatel, а скажем, sony-ericsson? в какие страны его?

На мой взгляд все же разумнее иметь 1 уровень в группах. Скажем таблицы

товар ( id name)
группа (id name)
товар_группа (id_товара id_группы)

и при добавлении товара стирмашинка, добавлять в товар_группа "бытовая техника", "аристон", "италия", "европа" .

Это существенно упростит поиск по любым условиям.

Ну если лень добавлять _все_ группы, можно приделать триггер, чтобы при добавлении "аристон" в товар группа, туда же писалась "Италия". А при добавлении "италия", иуда же писалась "европа". Всего лишь одна добавочная таблица.
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33040392
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХренА если не alcatel, а скажем, sony-ericsson? в какие страны его?
Вы задаете как раз тот вопрос, который является ответом на вопрос "чем плоха жесткая структура". Аналитики могут захотеть любое решение.

ХренНа мой взгляд все же разумнее иметь 1 уровень в группах. Скажем таблицы

товар ( id name)
группа (id name)
товар_группа (id_товара id_группы)
И куда Вы отнесете автомагнитолу? В "аудиотехнику" или в "автомобильные аксессуары"? А автомобильную зарядку для мобильника Nokia?

ХренЭто существенно упростит поиск по любым условиям.
Разумеется. Поскольку жестко ограничит возможности классификации.
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33040409
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
И куда Вы отнесете автомагнитолу? В "аудиотехнику" или в "автомобильные аксессуары"?


????

И туда и туда.. В товар_группа - несколько записей, относящихся к одному товару.
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33040462
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХренИ туда и туда.. В товар_группа - несколько записей, относящихся к одному товару.
Тогда я, видимо, Вас не понял. Прошу прощения.

Давайте тогда вернемся к "одноуровневости". Насколько я понимаю, Вы предлагаете вместо иерархической классификации делать отдельные группы для каждого уровня иерархии - так? Ну и соответственно включать товар во всех группы, соответствующие родительским уровням иерархии.

Плюс, который я вижу в таком решении на физическом уровне - скорость запросов. Минусы - идут на логическом уровне. Во-первых, тогда встает вопрос отображения; drilldown - любимая операция многих пользователей. Во-вторых, в некоей причудливой классификации компания может быть отнесена к "транснациональным" и не иметь страны, в другой - быть отнесена к конкретной стране (например, по расположению головного офиса). В результате может потребоваться создать похожие группы (а объяснить необходимость этого будет тяжело :), возникнут дурацкие проблемы с "набросай быстренько селект, который вернет всех итальянцев".

Поэтому я предпочел бы иметь таки явно выраженную иерархическую структуру; в то же время в рамках денормализации, вполне вероятно, завел бы таблицу, подобную Вашей товар_группа.

Собственно, как я понимаю, расхождение осталось только в наличии или отсутствии parent_id в таблице групп. Предлагаю решить, что здесь стоит смотреть по обстановке.
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33044131
Denis A.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Группа это не товар и не может никогда мутировать в него. Группа это отдельная сущность. Отдельная таблица со структурой типа

id int not null primary key
idparent int
name varchar(200) not null

где idparent - FK на id.

а товары "помещать в группы" либо через отдельную таблицу (если хитрое расположение, или один товар может быть в несколькоих группах):

goods_groups
----------------
idg int not null (fk к groups.id)
iditem int not null (fk к items.id)

либо прямо в items:

items
------
id not null primary key
idg int not null (fk к groups.ID)
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33046471
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По опыту на этапе логического проектирования подход следующий:
(1)Товар (конкретный артикул) характеризуется набором параметров.
(2)Некоторые из параметров могут быть деревьями (иерархиями) категорий.
(3)Для каждой иерархии должны быть определены правила ее применения:
- может ли товар относиться к нетерминальной категории? и наоборот:
- если категория имеет приписанные к ней товары, то разрешено ли создавть для нее подкатегории?
(4)Нужно различать текущее состояние дерева и его планируемое состояние.
Естественно, в текущем состоянии дерева есть вершины-листья (терминальные) и нетерминальные. Однако дерево может быть еще не завершено на текущий момент. Поэтому возможно следует явно определить признак абстрактной/конкретной категории и соответственно переписать правила (3).
(5) Иерархии категорий можно использовать и для других целей, например для описаия профилей интересов клиентов. Поэтому конечно товар отдельно, категории отдельно.
(6) Число параметров товара типа ссылки на иерархическую категорию может быть заранее неизвестным, Тогда нужна отдельная сущность для связи Товар/Категория. Если на счастье параметров ТОЧНО не больше скажем 20 то открывается еще вторая возможность - резервируем 20 пар полей (тип категории, категория) в Товаре в пику 1НФ. Далее см. топики про нормализацию.
...
Рейтинг: 0 / 0
Многоуровневый справочник товаров
    #33049231
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer СерегаЯ имел в виду геморой другого рода. Когда например некий "товар" становится "группой". Типа была "Просто Обувь", а после захотелось сделать "Детскую", "Женскую" и т.д.
Товар - не может стать группой , если говорить о нашей реальности. Товар - это объект учета; пришло сто двадцать пар ботинок детских, артикул такой-то, код товара такой-то, код партии такой-то, прочее такое-то так-то. Группа - это некое виртуальное понятие, абстракция, придуманное для облегчения работы мозга.


Denis A. Группа это не товар и не может никогда мутировать в него .

Так оба правы или - нет? Мне представляется , что товар может стать группой , а группа товаром - нет.

Серега, вроде , привел пример, когда может товар стать группой. Но чей-то softwarer не признал...
Мне кажется , если посмотреть шире, то яснее становится - откуда ноги растут у проблемы , и как все это следует моделировать.
Вспоминаются ключевые вопросы и приходящие на ум ответы :
- что такое группа ? - это тип или класс .
- товар ? - это экземпляр типа .
- что такое предки типа и свойства типа? - в сущности это одно и то же , за исключением того, что наследованные от предков свойства можно более удобно задать - они УЖЕ есть в прежде созданных типах-предках и их не нужно вновь описывать в отличие от новых свойств характеризующих конкретику данного типа.
- значение ? - данное - информация полностью достаточная для операций с экземпляром
- чем значение отличается от типа(имени типа) ? - тем , что оно дает полную информацию для нашей обработки этого экземпляра, в отличие от имени типа экземпляра, если тип экземпляра сложный. Т.е., если имени типа экземпляра достаточно для работы с ним , то не требуется вводить его значение экземпляра - само имя будет играть роль значения.
- что такое простой и сложный тип ? Простой не имеет никаких предков и не имеет никаких свойств. Он полностью определяется доменом своих значений. Сложный же тип имеет или свойства или предков или и то и др. и т.о. для задания экземпляра сложного типа требуется задание всех его свойств - и наследованных и собственных.

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

Т.о. вырисовывается следующая , хотя и c большими накладными расходами , но сколь угодно гибкая система, позволяющая в ее модели организовать все сущности любой предметной области ( привожу просто, чтобы показать , что потребуется для моделирования всего чего угодно ) :

Описание типов модели
===================

Types - описывает все типы всех данных модели (ну или можно только подсистему какую-нибудь выделить)
------------ PK - Id
Id - это же и FK для TParents.Id и FK для TProps.Id
Name - имя типа
Domain - имя таблицы-домена значений типа(см условные имена "Domain1",...) для простых типов или Null для сложных
UniqValues - True, если Домен содержит уникальные значения,False - иначе. Необходим для контроля доменов, например , данных текстового типа.

TParents - описание родителей типов (родителей много м.б.)
-------------- PK (Id,IdType)
Id
IdType - FK для Types.Id или Null для не имеющих родителя (или вообще можно для безродных обойтись без записей в этой таблице)


TProps - свойства типов имеющих Id в таблице Types
----------- PK (Id,IdType)
Id
IdType - FK для Types.Id или Null для не имеющих свойств (или вообще можно для простых обойтись без записей в этой таблице)

Доступ к экземплярам данных
=======================

Objects - ссылки на все экземпляры всех данных модели
------------- PK - Id
Id - он же FK для OParents.Id и FK для OProps.Id
IdType - FK для Types.Id
IdValue - FK для Id таблицы домена для данного типа(см. имя в [Types.Domain]). Т.е. содержит ссылку на значение для простого типа, а в случае, если в таблице - домене IdType Not Is Null(значение стало сложным типом), то Ссылка на значения сложного типа (модифицированного в него простого) определяется Objects.Id.

OParents - Ссылки на экземпляры типов родительской части
--------------- PK (Id,IdObject )
Id
IdObject - FK для Objects.Id или Null для не имеющих родителя (или вообще можно для безродных обойтись без записей в этой таблице)


OProps - Ссылки на экземпляры типов собственных свойств
------------ PK (Id,IdObject )
Id
IdObject- FK для Objects.Id или Null для не имеющих свойств (или вообще можно для простых обойтись без записей в этой таблице)

Хранение данных модели ( для каждого простого типа модели своя таблица )
=================== ( в соответствии с Types.Domain)

Domain1 - набор значений типа имеющего имя "Domain1" (см. Types.Domain)
----------- PK - Id
Id
Value - Значение экземпляра ( само оно некоего абстрактного типа из набора типов данных СУБД )
IdType - FK для Types.Id или Null. Сложный тип в который модифицирован прежде простой тип Objects.Type или Null, если это простой тип (модификации не было) . Если Not Is Null, то значение экземпляра при поиске из Objects ищется по Objects.Id, являющимся FK для OParents.Id и FK для OProps.Id, которые в свою очередь и определяют значения экземпляра по цепочке. Т.о. , вообще говоря, любое простое значение экземпляра может превратиться в сложный тип, причем, Домен, становится скопищем значений и типов разных классов(тип и класс - суть одно), но сложные типы всегда можно развернуть до простых типов.

Domain2
-----------
Id
Value
IdType

.....

Данная модель содержит все необходимое для построения любой системы произвольной гибкости, Для ее использования в реляционной СУБД требуется разумеется, создание поддержки из набора ХП,вью и триггеров, которые к структурной составлющей добавят необходимую поведенческую и обеспечат плоское представление.
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Многоуровневый справочник товаров
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]