django模型问题

时间:2011-08-09 04:11:30

标签: django django-models

我正在研究django模型而不是数据库专家我可以使用一些建议。我基本上有一个模型,其中包含与另一个模型的多对多关系。但是每次我包含某些东西时,我都需要为每个关系存储唯一值。

因此,例如在化学中,您可能含有许多含氢的元素,但每种元素中都含有独特的氢。因此,例如,水进入将与氢和氧连接,并且量将是两个氢原子和一个氧。

我想在这个场景中将氢和水作为元素存储在数据库中,因此我可以使用它们查询其他元素。

对此进行建模的最佳方法是什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

阅读文档here并密切关注甲壳虫乐队的例子,这正是你所需要的。

人 - >元件

组 - > Chemical_Compound

会员资格 - > Element_2_Chemical

Element_2_Chemical应该有一个int字段,详细说明每种化合物中有多少元素。

答案 1 :(得分:0)

在你的比喻中,你说“我希望在这个场景中氢气和水作为元素存储在数据库中,所以我可以使用它们查询其他元素。”

这是否意味着“水”可能出现在您正在建模的关系的任何部分? “水”是否与“牛奶”与“水”相关的“氢气”有关?

如果答案是肯定的,那么你应该使用有向无环图模型(希望你的关系中没有周期:A-> B-> C-> A)。查看django-dag(http://pypi.python.org/pypi/django-dag/)和django-treebeard-dag(http://pypi.python.org/pypi/django-treebeard-dag/0.2)包。

如果答案为否,那么你要明确区分什么是“容器”和什么是“容器”,在两个不同的模型之间使用正常的多对多rel,比如django中的“Membership”示例文档(https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships)。

在任何情况下,您都必须向关系的“边缘”添加更多信息。

严格遵循您的化学隐喻,您可能没有足够的信息建模,因为一些分子具有相同的成分但结构不同(它们被称为“异构体”)。例如戊烷,2-甲基丁烷和2,2-二甲基丙烷都有五个碳和十二个氢,但它们彼此非常不同......

有了这个,我说当你做一个“增强的多对多”时,它通常是一个复杂的模型,所以要注意不要遗漏任何东西。