2011-08-09 11 views
2

私はDjangoモデルで作業していますが、データベースの専門家ではなく、いくつかのアドバイスを使用することができます。私は基本的に、他のモデルとの多対多関係を含むモデルを持っています。しかし、私は何かを含めるたびに、各関係ごとに固有の値を格納する必要があります。djangoモデルの質問

たとえば化学では、水素を含む多くの元素があるかもしれませんが、各元素には水素が含まれています。したがって、例えば水の侵入は水素と酸素に接続され、その量は2つの水素原子と1つの酸素になります。

このシナリオでは水素と水をデータベースに要素として格納したいので、それらを使って他の要素に対してクエリを実行できます。

これをモデル化する最良の方法は何ですか?

ありがとうございます!

答えて

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)パッケージを調べてください。

「いいえ」の回答の場合、「コンテナ」と「コンテナ」の区別がはっきりしているため、「メンバーシップ」の例のように、2つの異なるモデル間で通常の多対多の関係を使用します。 djangoのドキュメント(https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships)。

いずれの場合でも、関係の「エッジ」に情報を追加する必要があります。

厳密には化学的メタファに従うと、分子の構成が同じで構造は異なる(「異性体」と呼ばれる)分子があるため、十分な情報をモデル化していない可能性があります。例えば、ペンタン、2-メチルブタンおよび2,2-ジメチルプロパンは5つの炭素と12の水素を持っていますが、それらは互いに非常に異なっています...

これは私が言っていることは、一般的には複雑なモデルなので、何かを残さないように注意してください。