我意识到可能存在类似的问题,但我找不到足够接近指导的问题。替代键作为复合键上的外键
鉴于这种规范,
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