Saya sedang mengembangkan database SQL Server 2012 dan saya punya pertanyaan tentang hubungan One-to-Zero-Or-One.
Saya punya dua meja, Codesdan HelperCodes. Kode dapat memiliki nol atau satu kode pembantu. Ini adalah skrip sql untuk membuat dua tabel ini dan hubungannya:
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])
)
Apakah itu benar?
Kode dan HelperCode keduanya merupakan entitas yang berbeda. HelperCode dapat digunakan (tidak ada Kode yang merujuknya), atau digunakan (hanya satu Kode yang merujuknya).
Mungkin Code.HelperCodeId harus menjadi bagian dari kunci utama tabel kode. Tapi saya tidak yakin apakah kolom nol bisa menjadi bagian dari primer. Melakukan ini, saya ingin mencegah dua atau lebih kode referensi HelperCode yang sama.
HelperCodeIdkolom sebagai Unik.
HelperCodeIdmenjadi bagian dari PK? Apakah itu, kebetulan, karena Anda ingin mencegah dua atau lebih Kode untuk referensi HelperCode yang sama?