Я понимаю, что могут быть похожие вопросы, но я не смог найти тот, который был достаточно близок для руководства.
Учитывая эту спецификацию,
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' в необработанных входных данных, которые будут заполнять эти таблицы, так что это еще одна вещь, которую можно изменить, я полагаю.
*: «виртуальный» внешний ключ, так как он был ранее решен вышестоящим руководством, мы не должны использовать фактические внешние ключи