मैं डेटाबेस के डिज़ाइन पर काम कर रहा हूं जिसका उपयोग कई अलग-अलग स्रोतों से उत्पन्न डेटा को संग्रहीत करने के लिए किया जाएगा। जिन मामलों को मैं संग्रहीत कर रहा हूं उन्हें मूल स्रोतों द्वारा अद्वितीय आईडी असाइन की गई हैं। मेरे द्वारा संग्रहीत प्रत्येक इंस्टेंस में उस स्रोत के बारे में जानकारी होनी चाहिए, जिस आईडी से यह इस स्रोत से जुड़ा हुआ आईडी था।समग्र प्राथमिक कुंजी
----------------------------------------------------------------
| source_id | id_on_source | data |
----------------------------------------------------------------
| 1 | 17600 | ... |
| 1 | 17601 | ... |
| 2 | 1 | ... |
| 3 | 1 | ... |
----------------------------------------------------------------
ध्यान दें कि जब id_on_source
प्रत्येक स्रोत के लिए अद्वितीय है, यह संभव है के लिए एक ही id_on_source
विभिन्न स्रोतों के लिए पाया जा सकता है:
उदाहरण के लिए, निम्न तालिका है कि समस्या को दिखाता है पर विचार करें।
मुझे संबंधपरक डेटाबेस की अच्छी समझ है, लेकिन एक विशेषज्ञ या यहां तक कि एक अनुभवी उपयोगकर्ता से बहुत दूर है। इस डिजाइन के साथ मुझे जिस समस्या का सामना करना पड़ता है वह है जिसे मुझे प्राथमिक कुंजी के रूप में उपयोग करना चाहिए। डेटा (source_id, id_on_source)
की एक समग्र प्राथमिक कुंजी के उपयोग को निर्देशित करता है। थोड़ा गुगल करने के बाद मुझे समग्र प्राथमिक कुंजी के पेशेवरों और विपक्ष पर कुछ गर्म बहसें मिलीं, हालांकि, मुझे थोड़ा उलझन में छोड़ दिया गया।
तालिका में अन्य तालिकाओं के साथ एक से अधिक संबंध होंगे, और इस प्रकार अन्य तालिकाओं की विदेशी कुंजी में संदर्भित किया जाएगा।
मैं एक विशिष्ट RDBMS
से बंधा नहीं कर रहा हूँ और मुझे यकीन है कि अगर यह मायने रखती है तर्क की खातिर नहीं हूँ, लेकिन कहते हैं कि मैं SQLite
और MySQL
साथ काम करना पसंद करते हैं।
इस मामले में एक समग्र विदेशी कुंजी का उपयोग करने के पेशेवर और विपक्ष क्या हैं? तुम किसे वरीयता दोगे?
युग और टाइमस्टैम्प (1, 1 9 70 ~ 2106) (2, 2106 ~ 2242) को स्टोर करने के लिए एक समग्र पीके के बारे में सोचें। चूंकि INT8, INT16, INT32, INT64 बाइनरी आधारित हैं और बिट आकार में आधारित हैं, तो हमारे पास वर्ष 99 99 के लिए उपयुक्त आईएनटी आकार नहीं है। INT पर्याप्त नहीं है और बड़ा इंट बहुत बड़ा है। – Alix