Bir SQL Server 2012 veritabanı geliştiriyorum ve bir-bir-sıfır-veya-bir ilişkisi hakkında bir sorum var.
İki masam var Codes
ve HelperCodes
. Bir kodun sıfır veya bir yardımcı kodu olabilir. Bu, bu iki tabloyu ve ilişkilerini oluşturmak için sql betiğidir:
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])
)
Bu doğru mu?
Kod ve HelperCode her ikisi de farklı varlıklardır. Bir HelperCode kullanılmış (hiçbir Kod ona referans vermez) veya kullanılabilir (yalnızca bir Kod ona atıfta bulunabilir) olabilir.
Belki Code.HelperCodeId, Kod tablosu birincil anahtarının bir parçası olmalıdır. Ancak, boş bir sütunun birincil sütunun bir parçası olup olmayacağından emin değilim. Bunu yaparken, iki veya daha fazla Kod aynı HelperCode başvurmak önlemek istiyorum.
HelperCodeId
sütunu Benzersiz olarak ayarlamaktır .
HelperCodeId
PK'nin bir parçası olmak istesin ? İki veya daha fazla Kodun aynı HelperCode'a referansta bulunmasını önlemek istediğiniz için herhangi bir şans var mı?