選擇外鍵的問題:S
我正在設計我的第一個關係數據庫。我現在正在進行概念設計,建構表和視圖,選擇主鍵和外鍵並規範化所有內容。但是現在,我有一張特定的桌子;我很難選擇合適的外鍵,我需要一些幫助。這是一個虛構的簡單案例來表示我遇到問題的關係。假設我有這 3 張桌子:
人表
Name
出生日期
名稱-DOB(串聯 PK)
名稱表
名稱 (PK)
意義
起源
出生日期表
出生日期 (PK)
星座
到目前為止還可以,但是下一張桌子讓我感到困惑。假設我有一個多對多的遞歸關係,它再次從我的“人員表”指向我的“人員表”,以映射婚禮。對於這種多多關係,我需要一個連結表。這張表(到目前為止在我的設計中)如下:
婚禮桌
丈夫姓名
丈夫出生日期
妻子姓名
妻子出生日期
現在對於“婚禮餐桌”,我有一些問題:
問題 1:我是否需要多對多關係的連結表的主鍵?如果是這樣,我可以使用什麼 PK ?我看到的唯一一個(除了為每行數據發明一個隨機“序列號”)是表中 4 個屬性的串聯,因為 2 或 3 個屬性的任何串聯都有可能是“不唯一的” (例如,假設有人可以在第一個丈夫/妻子去世時舉行第二次婚禮。對不起,這是我發現的用來說明我的現實生活問題的最好的虛構表格範例)。但它是不是太長了,4 個屬性的連接?
問題 2:我是否需要規範化多對多關係上的連結表?如果是這樣,我該怎麼做?因為在我看來,第 2 次(消除部分依賴)和第 3 次(消除傳遞依賴)是不可能的,因為丈夫 DOB 僅取決於丈夫姓名(妻子也一樣)……
問題 3:我使用什麼外鍵將“婚禮表”連結到“人表”?我應該使用“丈夫姓名-丈夫出生日期”和“妻子姓名-妻子出生日期”連接,因為“姓名-出生日期”是“人表”的 PK 嗎?如果是這樣,我是否需要在婚禮表中保留個人屬性(即丈夫姓名、丈夫出生日期、妻子姓名和妻子出生日期),因為它們在多對多關係中不需要?如果這些單獨的屬性不存在,是否會在通過使用者表單更新和提供數據庫中的資訊時造成任何問題?
感謝任何可以幫助我解決我的問題的人!
我將在下面使用 MS SQL 術語,但您可以將它們翻譯成您將使用的 DBMS。我還做了一些看起來合乎邏輯的假設,所以如果它們不適合你的模型,你可以放棄它們。我將按以下方式設置表格:
人員表
PersonID int PK
FName Varchar(50)
LName varchar(50)
DoB 日期FK
Name 表
名 varchar(50) PK
含義 varchar(MAX)
Origin int FK
DOB 表
DoB 日期 PK
AstrologicalSign int FK
婚禮桌
WeddingID int PK
HusbandPersonID int FK
WifePersonID int FK
來源表
OriginID int PK
OriginDescription varchar(50)
星座表
AstrologicalSignID int PK
AstrologicalSignDescription varchar(50)
我是一個視覺型的人,它可以幫助我以圖形方式查看事物,所以我也附上了一張圖表。
personID、astrologicalsignID、weddingID 和 originID 都設置為自動遞增的身份欄位。如果對您有幫助,我可以提供數據庫的 SQL 備份。