データベース設計が特定の関係を持つ Django アプリケーションに適用される限り、私は混乱しています。私は次のデータベース スキーマを見てきました: http://www.databaseanswers.org/data%5Fmodels/customers_and_orders/index.htm
Customer_addresses と Customers と Addresses の関係について混乱しています。
そんなこと知ってる:
- 1 人の顧客が複数のアドレスを持つことができます。
- 多くの顧客が同じ (1 つの) 住所を持つことができます
これは多対多の関係に相当しますか?
- 多くの顧客は多くのアドレスを持つことができますか?
私がdjangoでモデルを構築しているとき、私は(単純化された):
class Customer_Address(models.Model):
customer = models.ManyToManyField('inventory.Customer')
address = models.ManyToManyField('inventory.Address')
これは正しいですか?または、これはより理にかなっていますか:
class Customer_Address(models.Model):
customer = models.ForeignKeyField('inventory.Customer')
address = models.ManyToManyField('inventory.Address')
更新された質問:
多対多の関係であるという考えに基づいています。1 つの ManyToMany リレーションには 2 つの ManyToManyFields が必要ですか?
以下に基づく: http://en.wikipedia.org/wiki/Many-to-many_%28data_model%29
Django は ManyToManyFields をサポートしているので、ジャンクション テーブルさえ必要ないのですか? そして、ジャンクション テーブル (Customer_addresses) を使用する場合、記事は 2 つの OneToMany リレーションシップを使用することを暗示しているようですが、これはこのような 2 つの外部キーではないでしょうか?
class Customer_Address(models.Model):
customer = models.ForeignKeyField('inventory.Customer')
address = models.ForgeinKeyField('inventory.Address')
更新された質問:
これで、Django が中間テーブルを作成し、Customer_Addresses テーブルは不要であることがわかりました。ManyToManyfield を持つテーブルはどれですか? 顧客テーブル?またはアドレステーブル?
例: https://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany
Person/Groups の例では.. Groups には ManyToManyField があります。Person テーブルで ManyToManyfield を定義できなかった理由はありますか?