2011-08-09 107 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-二甲基丙烷具有全部五個碳和十二個氫,但它們彼此非常不同... ...

有了這個,我說,當你在做一個「增強多對多「,它通常是一個複雜的模型,所以請注意不要讓任何東西離開它。