Я розробляю базу даних 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 повинен бути частиною первинного ключа таблиці таблиці Code. Але я не впевнений, чи може нульовий стовпець бути частиною первинного. Роблячи це, я хочу запобігти тому, щоб два чи більше кодів посилалися на той самий HelperCode.
HelperCodeId
стовпчик як унікальний.
HelperCodeId
бути частиною ПК? Чи це випадково, тому що ви хочете не допустити, щоб два чи більше кодів посилалися на той самий HelperCode?