SQL Server 2012データベースを開発していますが、One-to-Zero-Or-Oneの関係について質問があります。
2つのテーブルがCodes
ありHelperCodes
ます。コードには、ゼロまたは1つのヘルパーコードを含めることができます。これは、これら2つのテーブルとそれらの関係を作成する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])
)
あれは正しいですか?
CodeとHelperCodeは両方とも異なるエンティティです。HelperCodeは、使用(コードを参照するコードなし)または使用(コードを参照するコードは1つのみ)できます。
Code.HelperCodeIdは、コードテーブルの主キーの一部である必要があります。しかし、null列がプライマリの一部になる可能性があるかどうかはわかりません。これを行うと、2つ以上のコードが同じHelperCodeを参照するのを防ぐことができます。
HelperCodeId
列を一意として設定することです。
HelperCodeId
PKに参加したいのですか?2つ以上のコードが同じHelperCodeを参照するのを防ぎたいのですが、たぶんそうでしょうか?