Проектирование базы данных для инвентаризации с множеством ограничений много-много? - PullRequest
0 голосов
/ 10 сентября 2018

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

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

Я думаю, box будет супер типом item.

Моя основная проблема - как структурировать / ограничить отношения между блоками, чтобы я мог по-прежнему ограничивать уникальное условие, что элемент может находиться только в одном «месте» за раз.

Я знаю, что отношения «многие ко многим» должны сообщать мне, какие элементы находятся в каких коробках, а как быть с коробками в других коробках?

Например:
Box A содержит Item B и Box C. Box C содержит Item D.

Как мне спроектировать систему, чтобы при поиске Item D я находил ее внутри Box A и Box C (действительно здорово, если бы я мог также знать, как соотносятся коробки - последние находятся внутри первых ).

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете использовать отношения self с самой таблицей. Вы можете упомянуть ниже упомянутые столбцы в вашей базе данных:

ItemId(PK)
ItemName
ItemType(Can be B for Box and I for item)
ItemContainer(Will contain ItemId from this table itself and will be null if it is not present in any box, if required add check constraint that if itemType is I then it cannot be null)

Вы можете разместить данные как:

ItemId      ItemName      ItemType     ItemContainer
  1         BoxA             B            (null)
  2         BoxB             B               1
  3         ItemA            I               2

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

Проверьте, помогает ли этот дизайн ...

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