आपको हमेशा अपनी तालिकाओं को तीसरे सामान्य रूप (3NF) में डिजाइन करके शुरू करना चाहिए। कम रूपों (आमतौर पर प्रदर्शन कारणों से) पर वापस लौटना काफी स्वीकार्य है, बशर्ते आप प्रभाव को समझें और कम करें, लेकिन शुरू करें 3NF के साथ।
याद रखने का (थोड़ा सरल) नियम यह है कि तालिका में प्रत्येक गैर-कुंजी कॉलम पर निर्भर होना चाहिए:
- कुंजी,
- पूरी कुंजी,
- और कुछ नहीं बस कुंजी,
- "तो मेरी मदद करो, कॉड" - थोड़ा डीबीए हास्य (और मेरा मतलब है "छोटा")।
पहला प्रश्न काफी सरल है।
एक-से-अनेक संबंधों को "कई" तालिका में विदेशी कुंजी के रूप में सर्वोत्तम रूप से दर्शाया जाता है। तो आप जो प्रस्ताव देते हैं वह समझदार है। यह आपको रिश्ते को स्वचालित रूप से प्रतिबंधित करने की अनुमति देता है। यदि आपके पास एक अलग जॉइनिंग टेबल है (कई-से-अनेक के लिए प्रयुक्त), तो आपको एक-से-अनेक संबंध लागू करने के लिए "ट्रिकरी" का सहारा लेना होगा।
जहां तक आपके दूसरे प्रश्न का सवाल है, आपको ऊपर दिए गए "कॉड" नियम को देखना होगा और अपने बारे में सोचना होगा:प्रत्येक तालिका में ये पंक्तियाँ वास्तव में क्या दर्शाती हैं? यदि कोई कार्य आइटम क्रिया किसी कार्य आइटम से भिन्न वस्तु है (वे संबंधित . हो सकती हैं लेकिन, अगर वे एक ही वस्तु का प्रतिनिधित्व नहीं कर रहे हैं, तो वे अलग हैं), उन्हें अलग-अलग तालिकाओं में होना चाहिए।
इसके अलावा, ऐसा प्रतीत होता है कि आपका वहां एक-से-अनेक संबंध है (एक आइटम में कई क्रियाएं हो सकती हैं) इसलिए उन्हें केवल उसी कारण से अलग-अलग तालिकाओं में होना चाहिए।
जहाँ तक अनावश्यक जानकारी पर आपकी क्वेरी का सवाल है:यदि वे वास्तव में हैं बेमानी, उनकी मरम्मत की जानी चाहिए।
step_num
. का उपयोग करना एक उदाहरण के रूप में, यह वास्तव में क्या दर्शाता है? अगर यह काम की विशेषता है आइटम, यह काम में नहीं होना चाहिए कार्रवाई टेबल बिल्कुल।
आपको वहां से इससे छुटकारा मिल जाएगा और, यदि आप कार्य क्रिया तालिका में एक पंक्ति के लिए चरण संख्या जानना चाहते हैं, तो आप विदेशी कुंजी का उपयोग करके कार्य आइटम तालिका में शामिल हो जाएंगे।
यदि इसके बजाय यह कार्य क्रिया की विशेषता है, तो आपको इसे कार्य आइटम तालिका से हटा देना चाहिए क्योंकि इसका कोई मतलब नहीं है। आपके पास अलग-अलग चरण संख्या के साथ दो क्रियाएं हो सकती हैं, तो उस स्थिति में मूल आइटम की चरण संख्या क्या होगी?
बेशक, आपके पास विशिष्ट . हो सकता है दोनों मदों के लिए चरण संख्या और क्रियाएँ - उस स्थिति में, मैं इरादा स्पष्ट करने के लिए नाम बदलने पर विचार करूंगा, कुछ इस तरह item_step_num
और action_step_num
।
निचला रेखा 3NF से शुरू करना है। यदि किसी बिंदु पर आपका डेटाबेस बहुत धीमा चलता है, तो तब कम रूप में प्रत्यावर्तन पर विचार करें। फिर आप दूसरा पूछ सकते हैं इससे उत्पन्न होने वाली समस्याओं को कैसे पहचाना और कम किया जाए (उदाहरण के लिए, दो स्थानों पर असंगत डेटा की संभावना, और इसे रोकने के लिए ट्रिगर का उपयोग करने की संभावना) के बारे में यहां प्रश्न।