तालिका "पार्टी" सही नहीं लगती है। स्रोत कोड से तुलना करें यह अन्य SO प्रश्न ।
इस तरह की संरचना में, पार्टी आईडी संख्या नीचे की ओर फैलती है, इसलिए बोलने के लिए। यह आमतौर पर या तो प्राथमिक कुंजी या तालिकाओं में एक विदेशी कुंजी होनी चाहिए जो किसी व्यक्ति के बारे में डेटा संग्रहीत करती है।
आपकी तालिका "रिपोर्टिंग" में, ऐसा लगता है कि प्राथमिक कुंजी 'पार्टीड' नहीं होनी चाहिए। इससे प्रति कर्मचारी केवल एक पंक्ति की अनुमति होगी, जो मुझे नहीं लगता कि आपका इरादा है। (मैं गलत हो सकता था।) अगर मैं इसके बारे में सही हूं, तो आप एक NOT NULL UNIQUE
पर विचार कर सकते हैं। {पार्टीड, दिनांक}, और एक PRIMARY KEY
. पर प्रतिबंध एक नए कॉलम, 'रिपोर्टिड' पर बाधा। टेबल "यात्रा" और "प्रदर्शन" शायद 'रिपोर्टिड' का संदर्भ देंगे। (लेकिन पढ़ते रहिये।)
आपके आरेख में ऐसे स्थान हैं जहां एक इकाई को एक अतिरिक्त कुंजी मिलती है:उदाहरण के लिए, आपकी कंपनी अपने कर्मचारियों को एक अद्वितीय कर्मचारी आईडी नंबर प्रदान करती है। कोई सैद्धांतिक कारण नहीं है कि आप उस बिंदु से संदर्भ कर्मचारियों के लिए 'पार्टीड' के बजाय 'कर्मचारी' का उपयोग नहीं कर सकते हैं। लेकिन वहाँ है एक व्यावहारिक कारण जो आप शायद नहीं करना चाहेंगे। यह जुड़ने की संख्या को बढ़ाता है।
उदाहरण के लिए, यदि टेबल "क्रेडेंशियल", "टूल", "प्रमाणीकरण", "अकादमिक", और "अनुपालन" कर्मचारी.पार्टीड के बजाय कर्मचारी को संदर्भित करते हैं, तो आप केवल "अनुपालन" और "पार्टी" में शामिल नहीं हो सकते हैं। व्यक्ति का नाम प्राप्त करें। आपको "कर्मचारी" से भी जुड़ना होगा।
उनके पास प्राथमिक कुंजी होनी चाहिए; जरूरी नहीं कि प्राथमिक कुंजी एक आईडी नंबर हो। यदि कोई प्राकृतिक कुंजी मौजूद है, तो आपको उसकी पहचान करनी होगी और फिर भी उसे अद्वितीय घोषित करना होगा।
तालिका "आदेश" में शायद इसकी प्राथमिक कुंजी के रूप में केवल "ऑर्डरिड" होना चाहिए; ग्राहक की पहचान करने के लिए एक विदेशी कुंजी संदर्भ का उपयोग करें। कुछ मामलों में, कॉलम का नाम बदलना समझ में आता है। ग्राहकों के मामले में, इसके कुंजी को 'पैरिटिड' के बजाय 'कस्टमरिड' कहना समझदारी हो सकती है। मैं खुद एक डोमेन बनाऊंगा।
create domain PARTY_ID as integer not null;
फिर, हर जगह जहां पार्टी आईडी नंबर की आवश्यकता होती है, मैं इसके बजाय डोमेन का उपयोग करूंगा।
create table customers (
customerid PARTY_ID primary key references parties (partyid),
...
मैं प्रबंधकों की एक तालिका भी देखना पसंद करूंगा। इसका एक संदर्भ इस बात की गारंटी देता है कि Manager.managerid एक वास्तविक प्रबंधक को हल करेगा, न कि केवल किसी कर्मचारी के लिए।