2011-02-12 156 views
0

鑑於:患者有許多醫生和醫生有多個患者。多對多關係:關聯表與單個外鍵?

以下兩種模式有什麼區別?

  • 選項1:關聯表
    • 病人[ID,DATA1]
    • 醫生[ID,DATA2]
    • Patient_Doctor [patient_id,doctor_id]
  • 選項2:單個外鍵
    • 患者[id,data1,doctor_id]
    • 醫生[ID,數據2]

我能想到的是,選項2要求您複製DATA1多次,如果數據1是大的性能將受到影響的唯一的事情。那是對的嗎?

+1

如果您認爲選項2中的數據重複可以接受,那麼爲什麼不選擇選項3:Patient_Doctor [patient_id,doctor_id,data1,data2]? – mbeckish 2011-02-12 22:19:25

+0

此外,您的問題的標題不準確。您的2個選項不是關聯表與單個外鍵。在這兩種情況下,都有一個關聯表(即一個表,其關鍵字由兩個不同實體的關鍵字組成)。唯一的區別是,在選項2中,您沒有Patient實體的獨立表。 – mbeckish 2011-02-12 22:21:42

回答

1

我能想到的唯一的事情是, 選項2要求您複製 data1多次,如果data1是 大性能將受到影響。那 是否正確?

不,這是不正確的。 「選項2」,其中patient.id可能是主鍵,可防止您爲每位患者插入多行。所以每個病人只能有一個醫生。這在一般情況下不起作用:初級保健醫生可能會將病人轉介給過敏症專家,胃腸病專家,腫瘤科醫生等。

爲了好玩,考慮醫生自己有醫生的事實。

0

沒錯,選項2是一對多的關係。所以每個病人都必須重複多次,這與數據庫正常化相反。

你的情況,是多對多的關係,這就是爲什麼你需要關係表。

方案2是不是性能的問題,而是設計的,病人可以有很多與他有關的字段,你不想要複製(醫療,ADRESS,電話等)