मैं 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])
)
क्या वो सही है?
एक कोड और एक हेल्परकोड दोनों अलग-अलग संस्थाएं हैं। एक हेल्परकोड का उपयोग किया जा सकता है (कोई भी कोड इसे संदर्भित नहीं करता है), या उपयोग किया जाता है (केवल एक कोड इसे संदर्भित करता है)।
शायद Code.HelperCodeId कोड तालिका प्राथमिक कुंजी का हिस्सा होना चाहिए। लेकिन मुझे यकीन नहीं है कि एक अशक्त स्तंभ प्राथमिक का हिस्सा हो सकता है। ऐसा करते हुए, मैं चाहता हूं कि दो या अधिक कोड एक ही हेल्परकोड का संदर्भ दें।
HelperCodeId
कॉलम को विशिष्ट के रूप में सेट करना है ।
HelperCodeId
पीके का हिस्सा क्यों बनना चाहेंगे ? क्या यह किसी भी संयोग से है, क्योंकि आप एक ही हेल्परकोड को संदर्भित करने के लिए दो या अधिक कोड को रोकना चाहते हैं?