У меня есть группа связанных компаний, которые делятся своими товарами друг с другом. У каждого предмета есть компания, которая владеет им, и компания, которая им владеет. Очевидно, что компания, которая владеет предметом, также может им владеть. Кроме того, компании иногда навсегда передают право собственности на предметы, а не просто одалживают их, поэтому я должен это учитывать.
Я пытаюсь решить, как моделировать владение и владение предметами. У меня есть стол Company
и стол Item
.
Вот варианты, которые я вижу:
Inventory
таблица с записями для каждого отношения Item
- Company
. Имеет поле company
, указывающее на Company
, и имеет логические поля is_owner и has_possession.
Inventory
таблица с записями для каждого Item
. Имеет поле owner_company
и поле possessing_company
, каждое из которых указывает на Company
.
- Две отдельные таблицы:
ItemOwner
и ItemHolder
**.
Пока я склоняюсь к третьему варианту, но таблицы , поэтому похожи на дублирование. Вариант два будет иметь только одну строку для каждого элемента (в этом отношении он чище, чем первый вариант), но иметь два поля в одной таблице, которые оба ссылаются на таблицу Company
, пахнет неправильно (и рисовать на диаграмме ER грязно! ).
Разработка базы данных - это не моя специальность (я в основном использовал нереляционные базы данных), поэтому я не знаю, какой будет наилучшая практика в этой ситуации. Кроме того, я новичок в Python и Django, так что может быть очевидная идиома или шаблон, который я пропускаю.
Каков наилучший способ смоделировать это без того, чтобы Company
и Item
не были загрязнены знанием владения и владения? Или я упускаю суть, желая сохранить свои модели такими раздельными? Что такое Pythonic путь?
Обновление
Я понял, что слишком много внимания уделяю проектированию баз данных. Было бы разумно просто написать хороший ОО-код и позволить ORM Джанго сделать это?