2017-04-01 96 views
0

假設我有在MySQL 兩個表1.Child(姓名,father_name) 2.Father(姓名,聯繫方式)爲什麼mysql允許外鍵引用複合主鍵的一部分?

表父親有一個複合鍵(姓名,聯繫方式).Father_name在子表引用名在父親。因此一個外鍵引用了主鍵的一部分。這是mysql允許的。

但是考慮以下情況:

表父親有下列元組:

(kishan,9906011111) 
(kishan,99906) 

現在假設我在孩子中插入一行

(xyz,kishan) 

我怎麼知道哪個基尚在父表是與xyz有關的孩子嗎?

如果mysql不允許外鍵引用主鍵的一部分,則可以避免這種情況。

請回答這個方案允許mysql的好處是什麼?

+0

因爲有可能* * foreign *鍵映射到值列表**。 –

回答

0

這是MySQL的一個特點。在我看來,外鍵只能是唯一的鍵或主鍵。不應使用外鍵關係映射到「設置」值。很顯然,MySQL的設計者不同意(與我和其他數據庫實現者一樣)。它們允許外鍵關係到索引的任何列 - 按照MySQL的說法,被定義爲「鍵」。如果你有一個組合主鍵,那麼最初的列就是這樣一個鍵。

爲了防止出現問題,讓你的表格明確的,易於使用的,我會建議:

  • 所有表有一個自動遞增的主鍵。
  • 所有的外鍵關係是只有主鍵(不是唯一的鍵或其他類型的鍵)。
  • 主鍵被命名爲實體的單數,後面跟着id(例如:thingsthingId作爲主鍵)。
  • 外鍵具有與主鍵相同的名稱(除非由於存在多個到同一個表的外鍵關係而無法實現)。