2011-08-09 36 views
2

我正在Django模型,而不是数据库专家我可以使用一些建议。我基本上有一个模型,其中包含与另一个模型的多对多关系。但是每次包含某些东西时,我都需要为每个关系存储唯一的值。因此,例如在化学中,可能有许多元素包括氢,但是每个元素都有独特的氢量。因此,例如,水入口将连接到氢气和氧气,并且量将是两个氢原子和一个氧气。Django模型问题

我希望氢和水在这种情况下作为元素存储在数据库中,所以我可以针对他们查询使用它们的其他元素。

建模的最佳方式是什么?

谢谢!

回答

2

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

人 - >元素

集团 - > Chemical_Compound

会员 - > Element_2_Chemical

Element_2_Chemical应该有一个int领域,详细介绍您在每个化合物有多少元素都有。

+0

谢谢,现在是睡觉的时间,所以明天我会检查一下。 :) –

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文档(https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships)。

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

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

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