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

द्विदिश विदेशी कुंजी बाधा

"मेरा मानना ​​है कि यह असंभव है। आप तब तक पता रिकॉर्ड नहीं बना सकते जब तक आप उस व्यक्ति की आईडी नहीं जानते और जब तक आप प्राथमिक एड्रेस आईडी फ़ील्ड के लिए पता आईडी नहीं जानते तब तक आप व्यक्ति रिकॉर्ड नहीं डाल सकते।"

ऊपर से देखने पर यह दावा काफी आकर्षक लगता है। हालांकि, यह काफी उतावलापन है।

यह एक बहुत ही सामान्य प्रकार की समस्या है जिस पर SQL DBMS विक्रेता शायद दशकों से हमला करने की कोशिश कर रहे हैं।

कुंजी यह है कि सभी बाधाओं की जाँच तब तक "स्थगित" होनी चाहिए जब तक कि दोनों प्रविष्टियाँ नहीं हो जातीं। यह विभिन्न रूपों के तहत हासिल किया जा सकता है। डेटाबेस लेनदेन कुछ ऐसा करने की संभावना की पेशकश कर सकते हैं जैसे "सेट स्थगित बाधा जांच चालू है", और आप कर चुके हैं (क्या यह इस तथ्य के लिए नहीं था कि इस विशेष उदाहरण में, आपको अपने डिजाइन के साथ बहुत मुश्किल गड़बड़ करनी होगी क्रम में केवल दो FK बाधाओं को परिभाषित करने में सक्षम होने के लिए, क्योंकि उनमें से एक SQL अर्थ में बस एक 'सत्य' FK नहीं है!)।

जैसा कि यहां बताया गया है, ट्रिगर-आधारित समाधान अनिवार्य रूप से समान प्रभाव प्राप्त करते हैं, लेकिन वे उन सभी रखरखाव समस्याओं के संपर्क में आते हैं जो एप्लिकेशन-प्रवर्तित अखंडता के साथ मौजूद हैं।

अपने काम में, क्रिस डेट और ह्यूग डार्विन वर्णन करते हैं कि समस्या का सही समाधान क्या है:एकाधिक असाइनमेंट। यानी, अनिवार्य रूप से, कई अलग-अलग अपडेट स्टेटमेंट बनाने की संभावना है और डीबीएमएस इस पर कार्य करता है जैसे कि वह एक ही स्टेटमेंट था। उस अवधारणा के कार्यान्वयन मौजूद हैं, लेकिन आपको ऐसा कोई भी नहीं मिलेगा जो SQL की बात करता हो।



  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 सर्वर ने घटक 'ओले ऑटोमेशन प्रक्रियाओं' की प्रक्रिया 'sys.sp_OACreate' तक पहुंच को अवरुद्ध कर दिया

  2. डेटाबेस का चयन करें जिसमें केवल विशिष्ट तालिका हो

  3. Sql सर्वर रिकॉर्ड अपडेट नहीं कर रहा है

  4. SQL सर्वर में ऑब्जेक्ट DIE बनाएं

  5. SQL सर्वर डिफ़ॉल्ट दिनांक समय टिकट?