Ich entwickle eine SQL Server 2012-Datenbank und habe eine Frage zu einer Eins-zu-Null-Oder-Eins-Beziehung.
Ich habe zwei Tische Codes
und HelperCodes
. Ein Code kann null oder einen Hilfscode haben. Dies ist das SQL-Skript zum Erstellen dieser beiden Tabellen und ihrer Beziehungen:
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])
)
Ist das korrekt?
Ein Code und ein HelperCode sind unterschiedliche Entitäten. Ein HelperCode kann ein verwendeter (kein Code verweist darauf) oder ein verwendeter (nur ein Code verweist darauf) sein.
Möglicherweise muss Code.HelperCodeId Teil des Primärschlüssels der Codetabelle sein. Ich bin mir aber nicht sicher, ob eine Nullspalte Teil einer Primärspalte sein könnte. Auf diese Weise möchte ich verhindern, dass zwei oder mehr Codes auf denselben HelperCode verweisen.
HelperCodeId
Spalte als eindeutig festzulegen.
HelperCodeId
ein Teil der PK sein wollen? Liegt es vielleicht daran, dass Sie verhindern möchten, dass zwei oder mehr Codes auf denselben HelperCode verweisen?