Je développe une base de données SQL Server 2012 et j'ai une question sur une relation un à zéro ou un.
J'ai deux tables, Codes
et HelperCodes
. Un code peut avoir zéro ou un code d'assistance. Voici le script sql pour créer ces deux tables et leurs relations:
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])
)
Est-ce exact?
Un code et un HelperCode sont deux entités différentes. Un HelperCode peut être utilisé (aucun code ne le référence) ou utilisé (un seul code le référence).
Peut-être que Code.HelperCodeId doit faire partie de la clé primaire de la table Code. Mais je ne sais pas si une colonne nulle pourrait faire partie d'un primaire. Ce faisant, je veux empêcher que deux ou plusieurs codes référencent le même HelperCode.
HelperCodeId
colonne comme Unique.
HelperCodeId
faire partie du PK? Est-ce, par hasard, parce que vous voulez empêcher deux codes ou plus de référencer le même HelperCode?