डेटाबेस में बाधाएं क्यों लागू की जाती हैं? क्या इसे कोड में रखना अधिक लचीला नहीं होगा?
मैं डेटाबेस को लागू करने के लिए शुरुआती किताब पढ़ रहा हूं, इसलिए मैं इसे शुरुआती के रूप में पूछ रहा हूं। मान लें कि मैंने इस इकाई मॉडल सहित एक डेटाबेस तैयार किया है:
entity type | sub-types
----------------+--------------------------------------------
Person | Employee, Student, ...
Student | Graduate, Undergraduate, ...
Employee | Teacher, Administrator, ...
वर्तमान बाधाओं:
- सिस्टम पर एक पंजीकृत व्यक्ति केवल एक छात्र या एक कर्मचारी हो सकता है।
- व्यक्ति इकाई को सामाजिक संख्या की विशिष्टता की आवश्यकता होती है, जिसे हम मानते हैं कि प्रत्येक व्यक्ति केवल एक ही अद्वितीय (उर्फ, एक अच्छी प्राथमिक कुंजी) रखता है । (# 1 देखें)
बाद में हम नंबर 1 को हटाने का निर्णय लेते हैं: यदि एक दिन कॉलेज तय करता है कि Teacher
( Employee
उप-प्रकार) भी हो सकता है Student
, अपने खाली समय में पाठ्यक्रम ले रहा है, तो डेटाबेस डिजाइन को बदलना बहुत कठिन है, जिसमें हजारों, लाखों, अरबों हो सकते हैं, केवल कोड में तर्क बदलने के बजाय प्रविष्टियों का क्षेत्र: बस वह हिस्सा जिसने किसी व्यक्ति को एक छात्र और एक कर्मचारी दोनों के रूप में पंजीकृत नहीं होने दिया।
(यह बहुत ही अनुचित है लेकिन मैं अभी और कुछ नहीं सोच सकता। जाहिरा तौर पर यह संभव है)।
हम कोड के बजाय डेटाबेस डिज़ाइन में व्यावसायिक नियमों की परवाह क्यों करते हैं ?
# 1: 7 साल बाद एक नोट, एक वास्तविक जीवन उदाहरण:
मैंने एक सरकार देखी है जहां एक गलती के कारण, जारी किए गए एसएसएन को दोहराया गया था: कई लोग, एक ही एसएसएन। मूल DB डिजाइन करने वालों ने निश्चित रूप से डेटाबेस में इस विशिष्टता बाधा को लागू नहीं करने की गलती की। (और बाद में मूल एप्लिकेशन में एक बग? साझा डेटाबेस का उपयोग करते हुए कई एप्लिकेशन और सहमत नहीं हैं कि बाधा कहां डालनी है, जांचना और लागू करना है? ...)।
यह बग सिस्टम में रहने के लिए जाएगा और उसके बाद विकसित किए गए सभी सिस्टम उस मूल सिस्टम के डेटाबेस पर निर्भर करते हैं, आने वाले कई वर्षों तक। यहाँ उत्तर पढ़कर मैंने सभी अड़चनों को लागू करना सीखा, उनमें से जितने संभव हो उतने ही बुद्धिमानी से (आँख बंद करके) डेटाबेस में वास्तविक भौतिक दुनिया का प्रतिनिधित्व करने के लिए जितना हो सके उतना अच्छा।