Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

डेटाबेस डिज़ाइन एक-से-अनेक-से-अनेक

आपको हमेशा अपनी तालिकाओं को तीसरे सामान्य रूप (3NF) में डिजाइन करके शुरू करना चाहिए। कम रूपों (आमतौर पर प्रदर्शन कारणों से) पर वापस लौटना काफी स्वीकार्य है, बशर्ते आप प्रभाव को समझें और कम करें, लेकिन शुरू करें 3NF के साथ।

याद रखने का (थोड़ा सरल) नियम यह है कि तालिका में प्रत्येक गैर-कुंजी कॉलम पर निर्भर होना चाहिए:

  • कुंजी,
  • पूरी कुंजी,
  • और कुछ नहीं बस कुंजी,
  • "तो मेरी मदद करो, कॉड" - थोड़ा डीबीए हास्य (और मेरा मतलब है "छोटा")।

पहला प्रश्न काफी सरल है।

एक-से-अनेक संबंधों को "कई" तालिका में विदेशी कुंजी के रूप में सर्वोत्तम रूप से दर्शाया जाता है। तो आप जो प्रस्ताव देते हैं वह समझदार है। यह आपको रिश्ते को स्वचालित रूप से प्रतिबंधित करने की अनुमति देता है। यदि आपके पास एक अलग जॉइनिंग टेबल है (कई-से-अनेक के लिए प्रयुक्त), तो आपको एक-से-अनेक संबंध लागू करने के लिए "ट्रिकरी" का सहारा लेना होगा।

जहां तक ​​आपके दूसरे प्रश्न का सवाल है, आपको ऊपर दिए गए "कॉड" नियम को देखना होगा और अपने बारे में सोचना होगा:प्रत्येक तालिका में ये पंक्तियाँ वास्तव में क्या दर्शाती हैं? यदि कोई कार्य आइटम क्रिया किसी कार्य आइटम से भिन्न वस्तु है (वे संबंधित . हो सकती हैं लेकिन, अगर वे एक ही वस्तु का प्रतिनिधित्व नहीं कर रहे हैं, तो वे अलग हैं), उन्हें अलग-अलग तालिकाओं में होना चाहिए।

इसके अलावा, ऐसा प्रतीत होता है कि आपका वहां एक-से-अनेक संबंध है (एक आइटम में कई क्रियाएं हो सकती हैं) इसलिए उन्हें केवल उसी कारण से अलग-अलग तालिकाओं में होना चाहिए।

जहाँ तक अनावश्यक जानकारी पर आपकी क्वेरी का सवाल है:यदि वे वास्तव में हैं बेमानी, उनकी मरम्मत की जानी चाहिए।

step_num . का उपयोग करना एक उदाहरण के रूप में, यह वास्तव में क्या दर्शाता है? अगर यह काम की विशेषता है आइटम, यह काम में नहीं होना चाहिए कार्रवाई टेबल बिल्कुल।

आपको वहां से इससे छुटकारा मिल जाएगा और, यदि आप कार्य क्रिया तालिका में एक पंक्ति के लिए चरण संख्या जानना चाहते हैं, तो आप विदेशी कुंजी का उपयोग करके कार्य आइटम तालिका में शामिल हो जाएंगे।

यदि इसके बजाय यह कार्य क्रिया की विशेषता है, तो आपको इसे कार्य आइटम तालिका से हटा देना चाहिए क्योंकि इसका कोई मतलब नहीं है। आपके पास अलग-अलग चरण संख्या के साथ दो क्रियाएं हो सकती हैं, तो उस स्थिति में मूल आइटम की चरण संख्या क्या होगी?

बेशक, आपके पास विशिष्ट . हो सकता है दोनों मदों के लिए चरण संख्या और क्रियाएँ - उस स्थिति में, मैं इरादा स्पष्ट करने के लिए नाम बदलने पर विचार करूंगा, कुछ इस तरह item_step_num और action_step_num

निचला रेखा 3NF से शुरू करना है। यदि किसी बिंदु पर आपका डेटाबेस बहुत धीमा चलता है, तो तब कम रूप में प्रत्यावर्तन पर विचार करें। फिर आप दूसरा पूछ सकते हैं इससे उत्पन्न होने वाली समस्याओं को कैसे पहचाना और कम किया जाए (उदाहरण के लिए, दो स्थानों पर असंगत डेटा की संभावना, और इसे रोकने के लिए ट्रिगर का उपयोग करने की संभावना) के बारे में यहां प्रश्न।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जेएमटर में जेडीबीसी कनेक्शन का उपयोग करने पर सर्वरआउट कैसे सेट करें?

  2. Oracle में sql में ट्री संरचना। SQL Oracle में ट्री, चाइल्ड नोड्स और पैरेंट नोड्स कैसे दिखाएं?

  3. क्या किसी सरणी से डेटा सम्मिलित करने के लिए FORALL का उपयोग करने का कोई तरीका है?

  4. डेटाबेस व्यू से चयन करते समय मुझे एक खुला लेनदेन क्यों मिलता है?

  5. थोक संग्रह के बिना वस्तुओं के संग्रह के साथ Oracle वस्तु का चयन