Estoy desarrollando una base de datos SQL Server 2012 y tengo una pregunta sobre una relación de uno a cero o uno.
Tengo dos mesas Codes
y HelperCodes
. Un código podría tener cero o un código auxiliar. Este es el script sql para crear estas dos tablas y sus relaciones:
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])
)
¿Es eso correcto?
Un código y un HelperCode son entidades diferentes. Un HelperCode puede ser usado (ningún Código lo hace referencia) o usado (solo un Código lo hace referencia).
Quizás Code.HelperCodeId debe ser parte de la clave primaria de la tabla de códigos. Pero no estoy seguro de si una columna nula podría ser parte de una primaria. Al hacer esto, quiero evitar que dos o más códigos hagan referencia al mismo HelperCode.
HelperCodeId
columna como Única.
HelperCodeId
ser parte de la PK? ¿Es, por casualidad, porque quiere evitar que dos o más Códigos hagan referencia al mismo Código de ayuda?