2012-08-24 19 views
3

我的理解是,OneToOneField用於僅1行數據從表2(最喜歡的水果)鏈接到一個數據行中表1(人名)和ForeignKey的是在多行數據(品牌/製造商)表2(車型)對1行數據表1(品牌/製造商)。使用哪一個:OneToOne與ForeignKey?

我的問題是,如果我有多個表,但只有一行從連回表1每個表的數據我應該怎麼用。例如:我有Table1作爲「汽車」,我的其他表格是「保險信息」,「汽車信息」,「修理歷史」。我應該使用ForeignKey還是OneToOne?

回答

5

你只需要問自己:「對象A有很多對象B還是對象B有很多對象A?」

這些表的關係每一個可能是不同的:

  1. 一輛車可以有1個或多個保險政策,保險政策只適用於一輛車。如果汽車只能有一輛,那麼它可能是一對一的。
  2. 一輛汽車可以有許多修理歷史記錄行,所以這將成爲修理歷史上的一個外鍵,作爲一組與汽車的反向關係。
  3. Car Info與django中的UserProfile概念類似。如果它是真正獨特的信息,那麼它也將是一對一的。但是,如果您將Car Info定義爲適用於類似Car模型的一般說明,那麼它將是Car Table上的外鍵以指代Car Info
+0

感謝您的快速回答!非常簡單易懂。 :) – Wesley

+0

當然可以。如果你需要額外的信息,請告訴我。否則,如果這能解決您的問題,請不要忘記打勾 – jdi

2

ForeignKey意味着您正在引用另一個表內存在的元素。 OneToOne,是一種ForeignKey,其中table1和table2的元素唯一地綁定在一起。

你最喜歡的水果的例子是OneToMany。因爲每個人都有獨特的最喜歡的水果,但每個水果可以有多個人列出特定的水果作爲他們的最愛。

OneToOne關係可以用你的Car例子完成。 Cars.VIN可能與CarInfo.VIN有OneToOne關係,因爲一輛車只會有一個與之關聯的CarInfo(反之亦然)。