为 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 关系的外键。
我需要一些帮助来转换为 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 关系的外键。