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