[英]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 個ssn
, ssn
只能屬於 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.