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

निम्नलिखित परिदृश्य में डीबी संबंध (पीके/एफके) बनाए रखने का कोई तरीका है

आपका डिज़ाइन कुछ भी "लगता नहीं" है क्योंकि हम आपके दिमाग को नहीं पढ़ सकते हैं। आपने एक डिज़ाइन के कुछ पहलू दिए हैं, लेकिन व्यवसाय "परिदृश्य" नहीं जो यह दर्शाता है/कार्यान्वित/वर्णन करता है या यह कैसे करता है।

SQL NULL, UNIQUE, PK और FK एक प्रकार की बाधाएँ हैं। डेटाबेस मान क्या प्रकट हो सकते हैं, इस पर एक बाधा एक सीमा है। एक SQL FK कहता है कि किसी तालिका में एक स्तंभ सूची के लिए उप-मान मान किसी स्तंभ सूची के लिए कहीं और दिखाई देने चाहिए, जिनके स्तंभ उनकी तालिका में एक SQL UNIQUE NOT NULL स्तंभ सेट (जो PK का मामला है) बनाते हैं। यदि आपका डिज़ाइन एक बाधा के अधीन है और यह अन्य लागू बाधाओं से निहित नहीं है, तो इसे लागू करें। अन्यथा नहीं। अधिमानतः घोषणात्मक रूप से। अधिकांश SQL DBMS आपको केवल कुछ प्रकार के सस्ते-से-लागू बाधाओं की घोषणा करने देते हैं। अन्य को ट्रिगर के माध्यम से लागू किया जाना चाहिए।

बाधाएं किसी दिए गए स्थिति में तालिकाओं से बाहर रहने वाली पंक्तियों के मानदंड का परिणाम हैं (तालिका भविष्यवाणी करती है , "तालिकाओं का क्या अर्थ है") और आपके व्यावसायिक नियमों के अनुसार कौन-सी स्थितियाँ उत्पन्न हो सकती हैं और क्या नहीं। हम नहीं जानते कि वे क्या हैं जब तक आप हमें नहीं बताते। हम आपके टेबल और कॉलम के नामों, आपके द्वारा दी गई किसी भी अन्य जानकारी और सामान्य ज्ञान का उपयोग करके अनुमान लगाने की उम्मीद कर सकते हैं।

आप बताना होगा हमें या तो बाधाएं या भविष्यवाणियां और कौन सी स्थितियां उत्पन्न हो सकती हैं/नहीं हो सकती हैं।

यहां आपकी टेबल एक सीधी तालिका और कुछ ईएवी डिज़ाइन का उपयोग कर रही हैं ताकि कुछ सीधी तालिका के डेटा को रिकॉर्ड किया जा सके जो आपके डिज़ाइन में स्पष्ट रूप से नहीं है। हमेशा की तरह आप कर सकते थे सीधी तालिका की स्कीमा और बाधाओं को अद्यतित रखने के लिए केवल डीडीएल का उपयोग करके ईएवी से बचें, लेकिन इसके बजाय आपने एक स्थिर स्कीमा चुना है जिसके लिए अधिक जटिल स्कीमा, प्रश्नों और बाधाओं की आवश्यकता होती है। ईएवी बाधाओं की सीधी अभिव्यक्ति आम तौर पर यह है कि वे जिस सीधी तालिका का प्रतिनिधित्व करते हैं उसमें कुछ बाधाएं हैं और साथ ही t_criteria_x इसके विचार हैं और/या यह उनका एक दृश्य है। लेकिन आम तौर पर उपलब्ध केवल SQL घोषणाएँ ही आपको उसके अंशों को व्यक्त करने देती हैं।

मैं अनुमान करता हूं कि आप यहां जो चाहते हैं, उसमें यह शामिल है कि प्रत्येक t_criteria_x तालिका के लिए उसका PK मान t_criteria_director में तालिका_नाम मान 't_criteria_x' के साथ दिखाई देना चाहिए। इसे रखने का दूसरा तरीका यह है कि यदि आपने 't_criteria_x' मान के साथ t_criteria_x a table_name कॉलम में जोड़ा है तो परिणाम में (id, table_name) सबरो t_criteria_director (criteria_id, table_name) सबरो के रूप में दिखाई देने चाहिए। अगर भी t_criteria_director (criteria_id, table_name) सबरो SQL UNIQUE NOT NULL हैं तो हमारे पास यह है कि संवर्धित t_criteria_x में एक समग्र SQL FK (id, table_name) है जो t_criteria_director (criteria_id, table_name) को संदर्भित करता है। आप वास्तव में t_criteria_x को ऐसे (संभावित रूप से गणना/उत्पन्न/गणना) कॉलम द्वारा बढ़ाकर इसे घोषित रूप से व्यक्त कर सकते हैं। लेकिन आपके पास शायद अन्य बाधाएं भी हैं, जैसे t_criteria_director में कोई भी (constraint_id, table_name) जोड़े नहीं हैं जो कुछ संवर्धित t_constraint_x द्वारा संदर्भित नहीं हैं।

कॉलम टेबल_नाम को कॉल करना ईएवी से कार्यान्वयन-उन्मुख पूर्वाग्रह दिखाता है क्योंकि वह कॉलम एक प्रकार/भिन्न भेदभावकर्ता/टैग है ईआर अर्थ में कि t_criteria_x तालिकाओं में id द्वारा दर्शाई गई संस्थाओं के प्रकार t_criteria_director द्वारा दर्शाई गई इकाई के प्रकार के "उपप्रकार" हैं। (यह 3GL रिकॉर्ड डेटा संरचनाओं की एक अवधारणा/तकनीक भी है जिसका उपयोग गतिशील रूप से टाइपिंग का अनुकरण करने के लिए किया जाता है।) आखिरकार table_name स्तंभ मान का तालिका नाम होना आवश्यक नहीं है, यह केवल कुछ मान होना चाहिए जो इकाई उपप्रकार की पहचान करता है, और ऐसी संस्थाओं को केवल एक तालिका के संबंध/संघ में भाग लेने की आवश्यकता नहीं है। (अनुसंधान एसक्यूएल/डेटाबेस/ईआर सबटाइपिंग/पॉलीमॉर्फिज्म/विरासत और डिजाइन विरोधी पैटर्न दो/कई/एकाधिक एफके [एसआईसी] से दो/कई/एकाधिक टेबल।)

आपको यह निर्धारित करना होगा कि तालिका क्या भविष्यवाणी करती है और परिणामस्वरूप उनकी बाधाएं क्या हैं। अधिमानतः यह निर्धारित करने के माध्यम से कि वे सामूहिक रूप से किस सीधी तालिका का प्रतिनिधित्व करते हैं और इसकी भविष्यवाणी क्या है और डेटाबेस बाधाएं इसका उपयोग कर रही हैं। फिर आपको यह तय करना होगा कि प्रति लागत/लाभ आप बाधाओं को घोषणात्मक बनाने के लिए अपने डिजाइन को संशोधित करने जा रहे हैं और/या आप ट्रिगर्स के माध्यम से बाधाओं को लागू करने जा रहे हैं या नहीं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. यूनियन (Mysql) पर ORDER BY लागू करें

  2. MySQL कार्यक्षेत्र

  3. MySQL JDBC ड्राइवर में cachePrepStmts और useServerPrepStmts में क्या अंतर है

  4. SET NAMES का उपयोग करना है या नहीं

  5. MySQL में सप्ताह दर सप्ताह प्रतिशत वृद्धि की गणना कैसे करें