ฉันกำลังพัฒนาฐานข้อมูล SQL Server 2012 และฉันมีคำถามเกี่ยวกับความสัมพันธ์แบบหนึ่งต่อศูนย์หรือหนึ่งวัน
ฉันมีสองตารางและCodes
HelperCodes
รหัสอาจมีรหัสศูนย์หรือหนึ่งตัวช่วย นี่คือสคริปต์ sql เพื่อสร้างสองตารางและความสัมพันธ์:
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])
)
ถูกต้องหรือไม่
รหัสและ HelperCode เป็นเอนทิตีที่ต่างกัน HelperCode สามารถใช้งานได้ (ไม่มีรหัสอ้างอิงเลย) หรือใช้ (ใช้รหัสอ้างอิงได้เพียงรหัสเดียว)
บางที Code.HelperCodeId ต้องเป็นส่วนหนึ่งของรหัสหลักของตารางรหัส แต่ฉันไม่แน่ใจว่าคอลัมน์ว่างอาจเป็นส่วนหนึ่งของคอลัมน์หลักได้หรือไม่ เมื่อต้องการทำเช่นนี้ฉันต้องการป้องกันไม่ให้สองหรือมากกว่ารหัสอ้างอิง HelperCode เดียวกัน
HelperCodeId
คอลัมน์เป็นไม่ซ้ำ
HelperCodeId
เป็นส่วนหนึ่งของ PK? เป็นเพราะโอกาสใด ๆ เพราะคุณต้องการป้องกันสองรหัสขึ้นไปเพื่ออ้างอิง HelperCode เดียวกัน