Задать вопрос
@kip_34
Хороший

Как оптимально спроектировать таблицы в бд?

Пытаюсь спроектировать максимально нормализированные таблицы, не могу до конца понять.
Есть изделия: жалюзи вертикальные, жалюзи горизонтальные и кассетные шторы. У кассетных может быть разный тип ткани (сплошная и день-ночь) и разный тип конструкции, причём для каждого типа ткани они свои. В зависимости от типа у изделий разная комплектация, которая высчитывается автоматически (от ширины или высоты изделия), либо устанавливается при создании.
Получается, нужна таблица с изделиями, где общая инфа для любого изделия. Далее таблица с типами изделий, которая привязывается к таблице с изделиями (1 к 1).
Таблица с типами конструкций, которая привязывается у таблице с типами изделий (1 ко многим).
Но как можно хранить все те данные, которые для каждого типа конструкции разные? Например, для первого типа не нужен короб, но нужен определённый вал, а для второго нужен короб и нужен уже другой вал. Или все эти вещи делать сущностями?
  • Вопрос задан
  • 77 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 3
@zhaar
Сделать отдельную таблицу, где будут перечислены эти свойства, а так же либо промежуточную таблицу (если может быть вариант, как короб + вал), либо сразу в основной таблице ссылаться на табличку с особенностями.

Т.е. 2 варианта:
1) В случае связи 1 к 1: Основная таблица + ячейка с линком на таблицу особенностей
2) В случае 1 ко многим: Основная таблица + ссылка на промежуточную (тут хранить все связи из основной таблицы и справочника особенностей) + справочник особенностей
Ответ написан
Комментировать
IgorPI
@IgorPI
Ответ написан
Комментировать
LaRN
@LaRN
Senior Developer
Я бы за основу взял устройство ЕСКД-шной спецификации (там есть все необходимое).

Например так:
Таблица содержащую описание детали(это там, где короб/вал и прочие детали.)
tEntity (id, Name)

Таблица содержащая параметры данной детали(это там где размеры детали и прочее)
tEntityParam(id, EntityID, ParamType, ParamValue)
Тут ParamType это тип параметра (длина/ширина/высота/марка стали...) - возможно для типов потребуется завести отдельную таблицу с описанием.
А ParamValue значение этого параметра.

Таблица описание типа (он же сборка - набор из нескольких деталей):
tAssemblyType(id, Name, EntityID, Quantity)
В этой таблице описываем из каких деталей (тип и количество - по сути спецификация) состоит сборка.

Таблица описание изделия (Возможно что изделие включает в себя несколько сборок):
tOrder(id, AssemblyTypeID, Name, Quantity)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы