दो टेबल हैं:
- उपयोगकर्ता
- पता
उपयोगकर्ता में पते का संदर्भ होता है।
पता में कॉलम CreatedBy और ModifiedBy शामिल हैं, जो उपयोगकर्ता के लिए संदर्भ है।
चक्रीय निर्भरता से बचने के लिए मैं इस डेटाबेस को कैसे डिजाइन करूं?
दो टेबल हैं:
उपयोगकर्ता में पते का संदर्भ होता है।
पता में कॉलम CreatedBy और ModifiedBy शामिल हैं, जो उपयोगकर्ता के लिए संदर्भ है।
चक्रीय निर्भरता से बचने के लिए मैं इस डेटाबेस को कैसे डिजाइन करूं?
जवाबों:
टिप्स और ट्रिक्स (शामिल बाधाओं में कमी) के लिए खोज करने के बजाय, मैं सुझाव दूंगा कि आप बस इस "रेफरेंस लॉक" से अपना रास्ता डिज़ाइन करें - इसलिए कुछ इस तरह आज़माएँ:
तथ्य
(UserID) मौजूद है।(AddressID) द्वारा बनाया गया था ।(UserID)(AddressID) पर पता बनाया गया था ।(DateCreated)(AddressID) अंतिम बार उपयोगकर्ता द्वारा दिनांक(UserID) पर संशोधित किया गया था ।(ModifiedOn)(UserID)से पते पर रहता है ।(AddressID)(ValidFrom)प्रतिबन्ध
Each पता exactly one उपयोगकर्ता द्वारा बनाया गया था । It is possible that more than one पता the same उपयोगकर्ता द्वारा बनाया गया था ।
Each exactly one दिनांक पर पता बनाया गया था । दिनांक पर It is possible that more than one पता बनाया गया था ।the same
For each पता and दिनांक , that पता at most one उपयोगकर्ता द्वारा that दिनांक पर संशोधित किया गया था ।
For each उपयोगकर्ता and दिनांक , that उपयोगकर्ता दिनांक के बाद से at most one पते का निवास करता है ।that
तार्किक

जहां तक अनिवार्य पते का संबंध है, आवेदन परत पर सत्यापित करें और लोडिंग स्टेटमेंट को लेनदेन में लपेटें - इस तरह से आपको सभी या कुछ भी नहीं मिलेगा।
आपके पास नीचे के रूप में 2 कार्यों में चक्रीय निर्भरता बनाने के अलावा कोई विकल्प नहीं है क्योंकि जब आप पहली बार बनाते हैं तो एक तालिका मौजूद नहीं होती है।
CREATE TABLE A (A_ID INT PRIMARY KEY, B_FK INT);
CREATE TABLE B (B_ID INT PRIMARY KEY, A_FK INT REFERENCES A(A_ID));
ALTER TABLE A ADD B_FK INT;
यदि आप चक्रीय निर्भरता से बचना चाहते हैं। फिर आपको एक संदर्भ बाधा दूर करने की आवश्यकता है या आप एक तरह से DELETE और UPDATE CASCADE संदर्भ जोड़ सकते हैं। यदि आपका तर्क कुछ जटिल है, तो आप TRIGGER भी लागू कर सकते हैं।