我正在做一个django模型,我不是一个数据库专家,我需要一些建议。我基本上有一个模型,它包含与另一个模型的多对多关系。但每次包含某些内容时,我都需要为每个关系存储唯一值。
举个例子,在化学中,你可能有很多包含氢的元素,但是每个元素都有一个独特的氢量。举个例子,水的入口将连接到氢和氧,数量将是两个氢原子和一个氧。
我希望这个场景中的氢和水作为元素存储在数据库中,这样我就可以根据它们查询使用它们的其他元素。
对此进行建模的最佳方式是什么?
谢谢!
发布于 2011-08-09 12:42:32
请阅读文档here并密切关注披头士乐队的示例,它正是您所需要的。
Person ->元素
组-> Chemical_Compound
Membership -> Element_2_Chemical
Element_2_Chemical应该有一个int字段,它详细说明了每个化合物中有多少元素。
发布于 2011-08-09 16:12:01
在您的比喻中,您可以说“我希望这个场景中的氢和水作为元素存储在数据库中,这样我就可以根据它们查询使用它们的其他元素。”
这是否意味着“水”可能在你正在建模的关系的任何部分?“水”与“氢”的关系(几乎)就像“牛奶”与“水”的关系一样吗?
如果答案是肯定的,那么你应该使用有向无环图模型(希望你的关系中不会有循环: 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 )包。
如果答案是否定的,那么你可以清楚地区分什么是“容器”和什么是“容器”,在两个不同的模型之间使用普通的多对多关系,就像django文档( https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships )中的“成员资格”示例。
在任何情况下,你都必须在关系的“边缘”添加更多的信息。
严格按照你的化学比喻,你可能没有模拟足够的信息,因为一些分子具有相同的组成但不同的结构(它们被称为“异构体”)。例如,戊烷,2-甲基丁烷和2,2-二甲基丙烷都有五个碳和十二个氢,但它们彼此非常不同…
我想说的是,当你在做一个“增强型多对多”模型时,它通常是一个复杂的模型,所以要注意不要遗漏任何东西。
https://stackoverflow.com/questions/6991276
复制相似问题