Я занимаюсь разработкой базы данных SQL Server 2012, и у меня есть вопрос об отношении «один к одному».
У меня есть две таблицы, Codesи HelperCodes. Код может иметь ноль или один вспомогательный код. Это скрипт sql для создания этих двух таблиц и их взаимосвязей:
CREATE TABLE [dbo].[Code]
(
[Id] NVARCHAR(20) NOT NULL,
[Level] TINYINT NOT NULL,
[CommissioningFlag] TINYINT NOT NULL,
[SentToRanger] BIT NOT NULL DEFAULT 0,
[LastChange] NVARCHAR(50) NOT NULL,
[UserName] NVARCHAR(50) NOT NULL,
[Source] NVARCHAR(50) NOT NULL,
[Reason] NVARCHAR(200) NULL,
[HelperCodeId] NVARCHAR(20) NULL,
CONSTRAINT [PK_Code] PRIMARY KEY CLUSTERED
(
[Id] ASC
),
CONSTRAINT [FK_Code_LevelConfiguration]
FOREIGN KEY ([Level])
REFERENCES [dbo].[LevelConfiguration] ([Level]),
CONSTRAINT [FK_Code_HelperCode]
FOREIGN KEY ([HelperCodeId])
REFERENCES [dbo].[HelperCode] ([HelperCodeId])
)
CREATE TABLE [dbo].[HelperCode]
(
[HelperCodeId] NVARCHAR(20) NOT NULL,
[Level] TINYINT NOT NULL,
[CommissioningFlag] TINYINT NOT NULL,
[LastChange] NVARCHAR(50) NOT NULL,
CONSTRAINT [PK_HelperCode] PRIMARY KEY CLUSTERED
(
[HelperCodeId] ASC
),
CONSTRAINT [FK_HelperCode_LevelConfiguration]
FOREIGN KEY ([Level])
REFERENCES [dbo].[LevelConfiguration] ([Level])
)
Это верно?
Код и HelperCode - это разные сущности. HelperCode может быть использован (ни один Код не ссылается на него), или используется (только один Код ссылается на него).
Возможно Code.HelperCodeId должен быть частью первичного ключа таблицы кодов. Но я не уверен, что нулевой столбец может быть частью первичного. Делая это, я хочу, чтобы два или более кодов ссылались на один и тот же HelperCode.
HelperCodeIdстолбец как уникальный.
HelperCodeIdбыть частью ПК? Это случайно не потому, что вы хотите запретить двум или более кодам ссылаться на один и тот же HelperCode?