同様の質問があるかもしれませんが、ガイダンスに十分近いものを見つけることができませんでした.
このスペックを考えると、
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) を使用した方がよいでしょうか? 本質的に、それはエピソード テーブルをシリーズ テーブルから分離することになり、私には合いません。
追加する価値があるのは、これらのテーブルに入力される生の入力データでは、SeriesCode が「ABCD-1」のように見え、EpisodeCode が「ABCD-1NMO9」のように見えることです。
*: 「仮想」外部キー。上層部によって事前に決定されているため、実際の外部キーは使用しないでください。