7

我的理解是 OneToOneField 仅用于Table2(最喜欢的水果)中的 1 行数据链接到Table1(人名)中的一行数据,ForeignKey 用于Table2(汽车模型)中的多行数据到 1 行表 1中的数据(品牌/制造商)。

我的问题是,如果我有多个表,但每个表中只有一行数据链接回Table1 ,我应该使用什么。例如:我有表1为“汽车”,我的其他表是“保险信息”、“汽车信息”、“维修历史”。我应该使用 ForeignKey 还是 OneToOne?

4

2 回答 2

13

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

这些表关系每个都可能不同:

  1. 一辆车可以有一份或多份保险单,而一份保险单只适用于一辆车。如果汽车只能有一个,那么它可能是一对一的。
  2. 一辆汽车可以有许多维修历史行,所以这将是维修历史上的一个外键,与汽车作为一个集合具有反向关系。
  3. Car Info 类似于 django 中的 UserProfile 概念。如果它是真正独特的信息,那么它也是一对一的。但是,如果您将 Car Info 定义为可以应用于类似 Car 模型的一般描述,那么引用 Car Info 将是 Car Table 上的外键
于 2012-08-24T19:08:10.027 回答
3

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

您最喜欢的水果示例是 OneToMany。因为每个人都有一个独特的最喜欢的水果,但每个水果可以有多个人将该特定水果列为他们的最爱。

OneToOne 关系可以通过您的 Car 示例完成。Cars.VIN 可以与 CarInfo.VIN 建立 OneToOne 关系,因为一辆车只会有一个 CarInfo 与之关联(反之亦然)。

于 2012-08-24T19:06:48.913 回答