моделирование ER-диаграммы для Django - PullRequest
0 голосов
/ 24 января 2019


Мне потребовалась некоторая помощь для преобразования в таблицы, а затем в модели django, используя интерфейс администратора Django, две сущности (Item, Prototype), где:

  • Элемент может быть отдельным объектом или быть частью одного прототипа * только 1006
  • Прототип существует, только если он содержит хотя бы элемент
  • Прототип может содержать множество различных предметов.

Диаграмма ER должна быть такой:
enter image description here

На стороне Django я хотел: от PrototypeAdmin включить любой элемент (ы) и от ItemAdmin назначить один прототип, как показано на следующих рисунках:
addChangeItem addChangePrototype

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

EDIT:
Моей первой попыткой было создать таблицу прототипов с двумя первичными ключами, но я обнаружил, что Django не работает с ними, а также у меня нет виджета внутри ItemAdmin для назначения элемента прототипу:


    Items: (<b>ItemID</b>, itemName)
    Prototypes:(<b>PrototypeID</b>,<b>ItemID</b>,prototypeName)

Другая попытка выдает таблицу Предметов с 95% NULL FK (у нас только несколько прототипов!), А также мне нужно было гарантировать уникальность prototypeID - ItemID, но это хорошо для нужного мне графического интерфейса (два предыдущих фото):


   Items: (<b>ItemID</b>, itemName, prototype(FK))
   Prototypes:(<b>PrototypeID</b>,prototypeName)

еще одна попытка, которая решает проблему тысяч NULL, но на стороне Django, в то время как я могу добавить много элементов к прототипу с помощью TabularInline, я не люблю использовать другой TabularInline для выбора того, какой прототип назначить элементу (Вместо этого я хотел выпадать):


    Items: (<b>ItemID</b>, itemName, prototype(FK))
    Prototypes:(<b>PrototypeID</b>,prototypeName)
    linkTableProtoItems: (lnk_ID, <b>prototype(FK)</b>, <b>item(FK)</b>)

1 Ответ

0 голосов
/ 24 января 2019

Учитывая ваши спецификации, то есть:

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

Ближайшей является ваша вторая схема:

Items: (ItemID, itemName, prototype (FK))

Prototypes: (PrototypeID, prototypeName)

Другие недействительны: первый не соответствует "Прототипу может содержать много разных предметов", а третий не учитывает "Элемент может быть частью только одного прототипа".

Тот факт, что 95% или более item.prototype_id равны нулю, это не проблема.

...