2015-11-25 50 views
0

假設我們有兩個表。一個是電影。電影表具有電影名稱和發行年份的字段以及哪個演員出演過。另一張桌子是主角。它有演員的名字和出生日期的字段。使用全名作爲主鍵vs創建附加字段

出生日期字段取決於姓名字段。將演員全名作爲主鍵有意義嗎?如果性能不是問題怎麼辦?

+1

主鍵必須是唯一的,演員名稱不能保證這一點。 –

+1

此外,演員已經知道不時更改他們的名字,PK值不應該在數據的整個生命週期中改變。 –

+0

即使除了已經提出的獨特性問題(這應該足以阻止你),你爲什麼要? – Uueerdo

回答

0

看樣子你有兩個問題:

1.難道是有意義的使用演員全名作爲主鍵?

這並非不可能 - 但正如其他評論者所指出的那樣,這是不可取的。其中一個原因是演員可能會改變他們的名字(另請參閱list of actors who have changed their name)。

此外,不止一個演員可以有相同的名字,所以全名不是主鍵的好選擇。

您最好使用保證唯一字段,如UUIDauto-increment字段來標識您的演員。

2.如果性能不成問題會怎樣?

我不認爲這是一個真正的性能問題,而是邏輯數據建模問題。你可以有一個高效的主鍵,它是一個字符串(如名稱),但在這種情況下,這不是一個合適的字段。

1

通常,使用名稱字段,即使是全名字段作爲主鍵也沒有任何意義。那是因爲你想要在現實世界中爲你的數據庫建模,而在現實世界中,人們的名字並不是唯一的。

現在,也許20世紀的美國電影演員有獨特的名字。但那是一個意外,而不是現實。

在圖書館學的世界裏,演員姓名等事物的名單被稱爲「受控詞彙」。如果你想了解幾個世紀以來經歷過的這種事情,那麼值得期待。

要在DBMS中實現受控詞彙表,可以使用帶有(自動增加)id號的表格。如果該人有別名(例如,「王子」,「以前稱爲王子的藝術家」和「TAFKAP」),則您將該人的姓名放在第二列中,將出生日期放在另一列中可能會在您的詞彙表中包含別名表。這將包含成對的ID號碼。

(請注意,即使沒有美國社會安全號是唯一的社會安全局曾把發佈社會保障卡的圖片的錯誤;很多人使用該卡上顯示的數字)

不要擔心表現。電影演員,演員羣衆演員,雙打演員和特技演員的總數完全在小型DBMS系統的能力範圍內,即使帶有ID號碼也是如此。

相關問題