SQL Server 2012 데이터베이스를 개발 중이며 일대일 관계에 대한 질문이 있습니다.
나는 두 개의 테이블을 가지고 Codes
와 HelperCodes
. 코드에는 0 개 또는 1 개의 도우미 코드가있을 수 있습니다. 이 두 테이블과 그 관계를 작성하는 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는 사용되거나 (코드가 아닌 코드를 참조하거나) 하나의 코드 만 참조 할 수 있습니다.
아마도 Code.HelperCodeId는 코드 테이블 기본 키의 일부 여야합니다. 그러나 null 열이 기본 열의 일부인지 확실하지 않습니다. 이렇게하면 둘 이상의 코드가 동일한 HelperCode를 참조하지 않도록하고 싶습니다.
HelperCodeId
열을 고유 로 설정하는 것 입니다.
HelperCodeId
PK에 참여 하고 싶 습니까? 두 개 이상의 코드가 동일한 HelperCode를 참조하지 못하도록하려고합니까?