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

एकाधिक तालिकाओं का संदर्भ देने वाली विदेशी कुंजी

आप एक प्रकार/उप प्रकार डेटा मॉडल पर विचार करना चाहेंगे। यह वस्तु उन्मुख प्रोग्रामिंग में वर्ग/उपवर्गों की तरह है, लेकिन लागू करने के लिए और अधिक अजीब है, और कोई आरडीबीएमएस (जिसे मैं जानता हूं) मूल रूप से उनका समर्थन नहीं करता है। सामान्य विचार है:

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

आपने इस मॉडल के साथ समस्या पर ध्यान दिया है, है ना? किसी भवन को दो या अधिक उपप्रकार तालिकाओं में प्रविष्टियाँ होने से रोकने के लिए क्या करना चाहिए? खुशी है कि आपने पूछा:

  1. एक कॉलम जोड़ें, शायद "बिल्डिंग टाइप", बिल्डिंग में, मान लें कि चार(1) {H, C, S, U} के अनुमत मानों के साथ (duh) बिल्डिंग के प्रकार को दर्शाता है।
  2. बिल्डिंग आईडी + बिल्डिंग टाइप पर एक अद्वितीय बाधा बनाएं
  3. उप-सारणी में BulidingType कॉलम रखें। इस पर एक चेक बाधा डालें ताकि इसे कभी भी केवल मान पर सेट किया जा सके (अस्पताल तालिका के लिए एच, आदि) सिद्धांत रूप में, यह एक परिकलित कॉलम हो सकता है; व्यवहार में, यह निम्न चरण के कारण काम नहीं करेगा:
  4. दोनों स्तंभों का उपयोग करके तालिकाओं को जोड़ने के लिए विदेशी कुंजी बनाएं

वोइला:टाइप एच के साथ एक बिल्डिंग पंक्ति सेट को देखते हुए, स्कूल तालिका में एक प्रविष्टि (प्रकार एस के साथ) उस बिल्डिंग को संदर्भित करने के लिए सेट नहीं की जा सकती है

आपको याद होगा कि मैंने कहा था कि इसे लागू करना कठिन था।

दरअसल, बड़ा सवाल यह है कि क्या यह करने लायक है? यदि यह चार (या अधिक, समय बीतने के साथ) भवन प्रकारों को प्रकार / उपप्रकार के रूप में लागू करने के लिए समझ में आता है (आगे सामान्यीकरण लाभ:पते के लिए एक स्थान और प्रत्येक भवन के लिए अन्य विशेषताएँ, उप-सारणी में संग्रहीत भवन-विशिष्ट विशेषताओं के साथ), यह निर्माण और रखरखाव के लिए अतिरिक्त प्रयास के लायक हो सकता है। यदि नहीं, तो आप एक वर्ग में वापस आ गए हैं:एक तार्किक मॉडल जिसे औसत आधुनिक RDBMS में लागू करना कठिन है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर, भ्रामक XLOCK और अनुकूलन

  2. पहले से मौजूद तालिका के लिए कॉलम पर अद्वितीय बाधा कैसे बनाएं - SQL सर्वर / TSQL ट्यूटोरियल भाग 97

  3. किसी फ़ंक्शन से संग्रहीत प्रक्रिया निष्पादित करें

  4. SQL सर्वर में अस्थायी तालिकाओं का परिचय

  5. 13 SQL सर्वर सुरक्षा सर्वोत्तम अभ्यास