Database-Design
功能依賴(希望是簡單的問題)
考慮跟踪學生的簡單問題:
STUDENT( StudentNumber, StudentName, Dorm, RoomType, DormCost, Club, ClubCost, Sibiling, Nickname )
會在
StudentName
功能上確定StudentNumber
嗎?沒有足夠的資訊嗎?這類問題有經驗法則嗎?
不,學生的姓名並不能確定他或她的身份,因此也不能確定學號。
可以有多個同名的人,但他們仍然會有不同的學號。
這就是為什麼數據庫通常有這樣的人工數字標識符的原因,也是你有客戶 ID、社會保險號等的原因。
選擇主鍵候選者時,請使用以下經驗法則:
- 該屬性是否唯一標識該行?名字不會。
- 屬性可以更改嗎?姓名可以更改,例如結婚時。
可變屬性不是數據庫中主鍵的好選擇,因為它們通過外鍵使引用完整性變得一團糟。
在大多數實際情況下,表的主鍵將是一個人為生成的數字。