मुझे डेटाबेस बनाना है और यह सुनिश्चित करना है कि हम डेटा को एक विशिष्ट तिथि पर लोड कर सकें, इसलिए मैंने tuple versioning का उपयोग करने का निर्णय लिया।ट्यूपल संस्करण और समग्र प्राथमिक कुंजी
मान लीजिए कि हम निम्न दो तालिकाओं करते हैं:
CREATE TABLE Author
(
Id UNIQUEIDENTIFIER NOT NULL,
Firstname VARCHAR(100) NOT NULL,
Surname VARCHAR(200) NOT NULL,
ValidFrom DATETIME NOT NULL,
ValidUntil DATETIME NULL,
PRIMARY KEY (ID, ValidFrom)
)
CREATE TABLE Book
(
Id UNIQUEIDENTIFIER NOT NULL,
Title VARCHAR(100) NOT NULL,
ISBN VARCHAR(100) NOT NULL,
AuthorId UNIQUEIDENTIFIER NOT NULL,
ValidFrom DATETIME NOT NULL,
ValidUntil DATETIME NULL,
PRIMARY KEY (Id, ValidFrom)
)
पहली बार जब मैं एक नए लेखक मैं एक नया GUID उत्पन्न होगा दर्ज करें। मैं पुस्तक तालिका में इस GUID का उपयोग करने के साथ-साथ लेखक का संदर्भ भी देता हूं।
यदि लेखक पर कोई अपडेट है, तो मैं एक ही GUID के साथ एक नया रिकॉर्ड बनाता हूं, लेकिन वर्तमान दिनांक को "ValidFrom" के रूप में परिभाषित करता हूं और मूल रिकॉर्ड से "ValidUntil" को वर्तमान दिनांक तक भी सेट करता हूं।
मुझे पुस्तक तालिका को बदलने की ज़रूरत नहीं है क्योंकि लेखक.आईडी नहीं बदला।
समस्या मैं अब का सामना करना पड़ रहा हूँकि मैं Book.AuthorId = Author.Id
पर एक विदेशी कुंजी बाधा जोड़ने के लिए दुर्भाग्य से यह काम नहीं करता, क्योंकि मैं एक समग्र प्राथमिक कुंजी का उपयोग करें चाहते हैं। मैं अपनी पुस्तक तालिका में लेखक। ValidFrom को जोड़ना नहीं चाहता क्योंकि मैं बस हालिया एक को संदर्भित करना चाहता हूं, न कि एक विशिष्ट संस्करण।
इस पर कोई विचार है कि मैं इसे कैसे हल कर सकता हूं? मुझे लगता है कि मैं एक ट्रिगर जोड़ सकता हूं जो सुनिश्चित करता है कि अगर कोई किताब पहले से दर्ज की गई है तो आप एक लेखक को हटा नहीं सकते हैं, लेकिन मेरे पास कैस्केड हटाने की अनुमति देने का कोई समाधान नहीं है।
मैं हर संकेत या सलाह के लिए आभारी हूं।
+1 को टुपल संस्करण –
का उल्लेख करने के लिए हटा रहे हैं कम से कम SQL सर्वर 2008? मेगन फॉक्स के संबंध में डेटाबेस डिजाइन को –
+1। – Yuck