簡體   English   中英

為什么我需要將子表的主鍵作為父表的外鍵,而不是相反的 1:1 識別關系?

[英]Why I need to have a primary key of a child table as a foreign key of a parent table and not vice versa for 1:1 identified relationship?

試圖理解數據庫概念並遇到這個問題。 識別關系是父表pk是子表fk的時候。 例如,我有一個person表和ssn表。 ssn不能沒有person就存在,一個person只能有 1 個ssnssn只能屬於 1 個人,所以應該是 1:1 確定的關系。

問題 #1:如果我可以唯一標識ssn ,因為它已經是唯一的,我還需要將person_id作為SSN表上的主鍵嗎? 當我將SSN表中的person_id設置為Person表中id的外鍵時,我的 SQl 工作台創建 1:n 關系。 然而,這是不准確的,因為一個人只能有 1 個 ssn(圖 1)

問題 #2 - 為什么會發生這種情況,因為它也可以是 1:1 關系,我可以輕松地根據 person_id fk 查詢 ssn 如果我從 SSN 表中刪除 person_id 作為主鍵,則關系變得無法識別(圖 2)

問題 #3 - 為什么會發生,因為我仍然可以在沒有 person_id 字段的情況下唯一標識 ssn

如果我使用工作台創建 1:1 身份關系,它會在PERSON表中創建一個外鍵,從而使其成為子表,而SSN成為不准確的父表我知道人們建議只需將數據放入當存在 1:1 識別關系時的父表,但是如果例如一個表已經有 20 個字段並且添加另外 20 個字段會使其變得超級大,那么創建一個單獨的表並將它們鏈接成 1:1 並不容易關系(圖3)

問題 #4:很容易記住 - 如果 1:1 將父表 fk 設置為子表 pk 並且如果 1:n - 將子表 fk 設置為父表 pk 但我想了解它背后的邏輯是什么? 提前在此處輸入圖片說明

如果是 1:1,則沒有“父母”或“孩子”——他們是彼此的“兄弟姐妹”。

存在根據問題標題的要求,因為沒有反向外鍵,它不會是 1:1,而是 1:0..*(一對多)。

為了保證 1:1 雙方都必須存在,而做到這一點的方法是使用雙向 FK。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM