使用哪个:OneToOne vs ForeignKey?

时间:2012-08-24 18:51:12

标签: python django

我的理解是,OneToOneField仅用于 Table2 (收藏水果)中的一行数据,这些数据链接到 Table1 (人名),ForeignKey用于 Table2 (车型)中的多行数据到 Table1 (品牌/制造商)。

我的问题是,如果我有多个表但每个表中只有一行数据链接回 Table1 ,我应该使用什么。例如:我将Table1设为“Cars”,其他表格为“Insurance Info”,“Car Info”,“Repair History”。我应该使用ForeignKey还是OneToOne?

2 个答案:

答案 0 :(得分:6)

你只需要问自己“对象A可以有多个对象B,或对象B有多个对象A”吗?

这些表关系各有不同:

  1. 汽车可以有一个或多个保险单,保险单只适用于一辆车。如果汽车只能有一辆,那么它可能是一对一的。
  2. Car可以拥有许多修复历史记录行,因此这将是修复历史记录中的外键,与Car作为一组背面关系。
  3. Car Info与django中的UserProfile概念类似。如果它是真正独特的信息,那么它也将是一对一的。但是,如果您将汽车信息定义为可应用于类似汽车模型的一般说明,那么它将是汽车表上的外键以引用汽车信息

答案 1 :(得分:2)

ForeignKey表示您正在引用另一个表中存在的元素。 OneToOne是一种ForeignKey,其中table1和table2的元素唯一地绑定在一起。

你最喜欢的水果例子是OneToMany。因为每个人都有一个独特的喜爱的水果,但每个水果可以有多个人列出特定的水果作为他们的最爱。

可以使用您的Car示例完成OneToOne关系。 Cars.VIN可能与CarInfo.VIN有一个OneToOne关系,因为一辆车只会有一个与之相关的CarInfo(反之亦然)。