Tworzę bazę danych SQL Server 2012 i mam pytanie dotyczące relacji jeden do zera lub jeden.
Mam dwa stoły Codes
i HelperCodes
. Kod może mieć zero lub jeden kod pomocniczy. To jest skrypt SQL, aby utworzyć te dwie tabele i ich relacje:
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])
)
Czy to jest poprawne?
Kod i Kod pomocniczy to różne podmioty. HelperCode może być używany (żaden kod go nie odwołuje) lub używany (tylko jeden kod go odwołuje).
Może Code.HelperCodeId musi być częścią klucza podstawowego tabeli kodów. Ale nie jestem pewien, czy pusta kolumna może być częścią podstawowej. W ten sposób chcę zapobiec, aby dwa lub więcej kodów odwoływało się do tego samego kodu pomocniczego.
HelperCodeId
kolumny jako unikatowej.
HelperCodeId
być częścią PK? Czy to przypadkiem, ponieważ chcesz zapobiec, aby dwa lub więcej kodów odwoływało się do tego samego kodu pomocniczego?