我正在开发一个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])
)
那是对的吗?
Code和HelperCode都是不同的实体。一个HelperCode可以是二手的(没有代码引用它),也可以是二手的(只有一个Code引用它)。
也许Code.HelperCodeId必须是代码表主键的一部分。但是我不确定空列是否可以成为主数据库的一部分。这样做,我想防止两个或多个代码引用相同的HelperCode。
HelperCodeId
列设置为“唯一”。
HelperCodeId
成为PK的一部分?是否是因为您想防止两个或多个代码引用同一HelperCode而引起的吗?