为 django 建模 ER 图

modelling an ER diagram for django


我需要一些帮助来转换为 tables,然后再转换为 django 的模型,使用 Django 的管理界面,两个实体(项目,原型),其中:

ER图应该是这样的:

在 Django 方面,我希望:从 PrototypeAdmin 包含任何项目,从 ItemAdmin 分配给一个原型,如下图所示:

我尝试设计了不同的模型,但我对我的结果并不完全满意(一次尝试意味着很多 NULL,另一个尝试提供了一个管理界面不太好用,另一个我只能将项目添加到原型..)

编辑:
我的第一次尝试是设计一个带有两个主键的原型 table,但我发现 Django 不能很好地与它们一起工作,而且我在 ItemAdmin 中没有任何小部件来将 Item 分配给原型:


    项目:(ItemID,itemName)
    原型:(PrototypeID,ItemID,prototypeName)

另一次尝试给出了 table 个具有 95% NULL FK 的项目(我们只有几个原型!)而且我需要保证原型 ID 的唯一性——ItemID,但这对 GUI 有好处我想要的(前两张图):


   项目:(ItemID, itemName, prototype(FK))
   原型:(PrototypeID,prototypeName)

另一种解决数以千计 NULL 问题的尝试,但在 Django 方面,虽然我可以使用 TabularInline 向原型添加许多项目,但我不喜欢使用另一个 TabularInline 来选择要分配给哪个原型一个项目(我希望有一个下拉菜单):


    项目:(ItemID, itemName, prototype(FK))
    原型:(PrototypeID,prototypeName)
    linkTableProtoItems: (lnk_ID, prototype(FK), item(FK))

鉴于您的规格,即:

Item can be a standalone object or be part of one prototype only Prototype exists only if it contains at least an Item A Prototype can contain many different items.

最近的架构是您的第二个架构:

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

Prototypes:(PrototypeID,prototypeName)

其他无效:第一个不尊重"A Prototype can contain many different items",第三个不尊重"Item can be part of one prototype only"。

item.prototype_id 的 95% 或更多是空值这一事实在任何方面都不是问题。

项目:(项目 ID、项目名称)

原型:(PrototypeID,ItemID,prototypeName)

在Items关系中,ItemID必须是主键,在Protorypes关系中,PrototypeID必须是主键。但是 Prototypes 关系中的 ItemID 将是引用 Items 关系的外键。