मैं एक डेटाबेस डिजाइन समस्या है कि मेरी लीग से बाहर है ठोकर खाई है, और मेरे गो-टू डीबीए गुरु आग अभ्यास पर बंद है।
संक्षेप में, मेरे पास निम्न प्राथमिक कुंजी (संक्षिप्तता के लिए PK) के साथ एक तालिका है:
child_id integer
parent_id integer
date datetime
child_idऔर parent_idइकाई तालिकाओं के लिए विदेशी कुंजी हैं। "चाइल्ड" टेबल में ही "पैरेंट" टेबल के लिए एक विदेशी कुंजी होती है, और लो, प्रत्येक child_idहमेशा parent_idऊपर दी गई तालिका द्वारा अपेक्षित के रूप में संदर्भित करता है। वास्तव में, पता चला है कि दोनों को सिंक में रखते हुए कुछ अतिरिक्त कोड हैं।
जो इस अतिरेक को सामान्य बनाता है नौसिखिए कहते हैं "मुझे इसके बजाय अतिरेक को दूर करना चाहिए!"
मैं निम्नलिखित का विघटन करता हूं:
Table_1 PK:
child_id integer
date datetime
Table_2 PK:
parent_id integer
date datetime
Table_3: (already exists)
child_id integer PRIMARY KEY
parent_id integer FOREIGN KEY
और लो, जब मैं इन लोगों को एक साथ प्राकृतिक तरीके से जोड़ता हूं, तो मैं मूल तालिका को पुनर्प्राप्त करता हूं। यह मेरी समझ है जो इसे 5NF बनाता है।
हालाँकि, अब मुझे एहसास हुआ कि एक छिपा हुआ व्यापार नियम है।
आम तौर पर, दी गई child_idतारीखों को संबंधित तारीखों का सबसेट होना चाहिए parent_id। आप देख सकते हैं कि पहली तालिका इस नियम को लागू करती है।
मेरा अपघटन नियम को लागू नहीं करता है, क्योंकि आप स्वतंत्र रूप से तालिका 1 में जोड़ सकते हैं जब तक कि तिथियां बहुत बड़ी न हो जाएं।
जो मुझे यहाँ ले जाता है, निम्नलिखित प्रश्नों के साथ:
क्या यह अपघटन 5NF है? जबकि मैं कहूंगा कि यह सम्मिलन विसंगतियों को अनुमति देता है, यह विकी उदाहरण का अनुसरण भी करता है, जो स्वयं इस गाइड का अनुसरण करता है । वाक्यांश (जोर मेरा) "हम तीन अलग-अलग रिकॉर्ड प्रकारों से मिलकर एक सामान्य रूप से सभी सही तथ्यों को फिर से संगठित कर सकते हैं" मुझे विशेष विराम देता है, क्योंकि मैं चाहे कितना भी कचरा पंप करता हो
Table_1, प्राकृतिक जुड़ाव अभी भी इसे अनदेखा करता है।माना कि मुझे यह अपघटन पसंद नहीं है (मैं नहीं)। मैं स्वतंत्र रूप से स्वीकार करता हूं कि व्यावहारिक समाधान तालिका और कोड को छोड़ना है जैसा कि वे हैं। लेकिन, सिद्धांत रूप में, क्या इस तरह से विघटित और / या बाधाओं को जोड़ने का एक तरीका है कि मैं पहली तालिका से दूर हो जाऊं और अपने व्यावसायिक नियमों का संरक्षण करूं?