我意識到可能存在類似的問題,但我找不到足夠接近指導的問題。替代鍵作爲複合鍵上的外鍵
鑑於這種規範,
Site
---------------------------
SiteID int identity
Name varchar(50)
Series
---------------------
SiteID int
SeriesCode varchar(6)
...
--SeriesCode will be unique for every unique SiteID
Episode
----------------------
SiteID int
SeriesCode varchar(6)
EpisodeCode varchar(10)
...
我提出的設計/實施
Site
----------------------------
SiteID int identity
Name varchar(50)
Series
-------------------------------------------
SeriesID int identity, surrogate key
SiteID int natural key
SeriesCode varchar(6) natural key
UNIQUE(SiteID, SeriesCode)
...
Episode
-------------------------------------------
EpisodeID int identity, surrogate key
SeriesID int foreign key
EpisodeCode varchar(6) natural key
...
什麼問題呢?在這裏將SeriesID代理作爲外鍵*可以嗎?我不確定是否遺漏了可能出現的任何明顯問題。或者,使用複合自然鍵(SiteID + SeriesCode/SiteID + EpisodeCode)會更好嗎?從本質上講,這將解耦來自Series系列表的Episode表,並不適合我。
值得注意的是,在原始輸入數據中,SeriesCode看起來像'ABCD-1'和EpisodeCode,它將填充這些表格,所以這是另一件可以改變的東西。
*:「虛擬」的外鍵,因爲它是由上級預先決定,我們不應該使用實際外鍵
好點。事實上,將會有附加的表與情節相關聯。這些只是整個數據庫的基表。 – 2009-10-27 17:57:07