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

एक कमजोर इकाई के लिए डेटाबेस मॉडलिंग

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

एक ऐसी इकाई का होना पूरी तरह से वैध है जो स्वतंत्र रूप से मौजूद नहीं हो सकती है, लेकिन स्वतंत्र रूप से पहचानी जा सकती है - दूसरे शब्दों में, जो गैर-नल के साथ एक गैर-पहचान संबंध में है।

आपको पूछना होगा:historyLineID . कर सकते हैं अद्वितीय बनें अकेले , या orderID . के संयोजन में ? मुझे संदेह है कि बाद वाला मामला है, जो इसे एक कमजोर इकाई बना देगा।

आपने हमें जो दिखाया है वह कमजोर इकाई नहीं है - माता-पिता का पीके बच्चे के पीके में माइग्रेट नहीं किया गया है।

आपके पास अनिवार्य रूप से दो विकल्प हैं:

  • orderHistory एक संयुक्त PK है:{orderID, historyLineID} , जहां orderID एफके है। BTW, इस PK को "स्वाभाविक" माना जा सकता है:

  • orderHistory एक सरोगेट PK है:{orderHistoryID} , जबकि orderID पीके के बाहर है। आपको अब भी एक वैकल्पिक कुंजी {orderID, historyLineID} . की आवश्यकता होगी हालांकि:

हाँ, यह ऊपर वर्णित पहला विकल्प है। जब तक आपके orderHistory . पर बाल संबंध न हों अपने आप में, यह भी सबसे अच्छा उपाय है। अगर orderHistory बच्चे हैं, तो यह कई कारकों के आधार पर सबसे अच्छा समाधान हो भी सकता है और नहीं भी।

यह या तो-या नहीं है। जैसा कि ऊपर दिखाया गया है, एक फ़ील्ड FK और एक (प्राथमिक या वैकल्पिक) कुंजी का हिस्सा हो सकता है।

आप तब तक 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. MySQL:उसी MySql उदाहरण पर एक MySQL डेटाबेस को क्लोन करना

  2. Google मानचित्र PHP का उपयोग करके बहुभुज और बिंदुओं को MySQL में सहेजें

  3. sqlalchemy के माध्यम से निष्पादन करते समय एकाधिक कथन निष्पादित करने में सक्षम करें

  4. MySQL कई से कई एकल पंक्तियों में शामिल होता है

  5. एकल तालिका के भीतर SQL समय अंतर