【发布时间】:2012-12-15 17:51:16
【问题描述】:
对于具有特定关系的 Django 应用程序的数据库设计,我感到很困惑。我一直在查看以下数据库架构:http://www.databaseanswers.org/data%5Fmodels/customers_and_orders/index.htm
我对 Customer_addresses 和 Customers 以及 Addresses 之间的关系感到困惑。
我知道:
- 一个客户可以有多个地址。
- 许多客户可以拥有相同的(一个)地址
这是否等同于多对多关系?
- 许多客户可以有多个地址?
当我在 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')
更新问题:
基于它是多对多关系的想法。 一个多对多关系是否需要两个多对多字段?
基于以下几点: http://en.wikipedia.org/wiki/Many-to-many_%28data_model%29
既然 Django 支持 ManyToManyFields,我什至不需要联结表吗? 如果我确实使用联结表 (Customer_addresses),这篇文章似乎暗示使用两个 OneToMany 关系,那不就是像这样的两个外键吗?
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?
【问题讨论】:
-
如果在您的情况下,许多客户可以拥有与多对多关系相同的地址。
-
那么第一个模型将是要走的路吗?
-
是的,第一个对你有用。冒昧的风险,我认为你需要修改你的数据库基础,请阅读en.wikipedia.org/wiki/Many-to-many_%28data_model%29
-
感谢您的链接。我已经读过了,我想让我感到困惑的是关于 ManyToManyFields 的最后一个声明。由于 Django 允许使用 ManyToManyfields.. 我不需要联结表吗?我要更新我的问题。
-
我真的很抱歉错过了那部分。这实际上是一个非常好的问题。不,你不需要两个 ManyToManyFields,Django 后端处理所有事情docs.djangoproject.com/en/dev/ref/models/fields/…
标签: django-models database-schema