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

दो टेबल संरचना के बीच अंतर

एंटीपैटर्न?

सामान्य स्थिति में, दूसरी तालिका एंटी-पैटर्न है डेटाबेस डिजाइन के संदर्भ में। और, इससे भी अधिक, इसका विशिष्ट नाम है:इकाई-विशेषता-मूल्य (ईएवी)। कुछ मामले हैं, जब इस डिजाइन का उपयोग करना उचित है, लेकिन यह दुर्लभ मामले हैं - और वहां भी इसे टाला जा सकता है।


ईएवी खराब क्यों है

डेटा अखंडता समर्थन

इस तथ्य के बावजूद कि ऐसी संरचना अधिक "लचीली" या "उन्नत" लगती है, इस डिजाइन में कमजोरी है।

  • अनिवार्य विशेषताओं को बनाना असंभव है . आप कुछ विशेषता को अनिवार्य नहीं बना सकते, क्योंकि विशेषता अब एक पंक्ति के रूप में संग्रहीत है - और एकमात्र संकेत है कि विशेषता सेट नहीं है - यह है कि संबंधित पंक्ति तालिका में अनुपस्थित है। SQL आपको इस तरह की बाधा को मूल रूप से बनाने की अनुमति नहीं देगा - इस प्रकार, आपको इसे आवेदन में जांचना होगा - और, हाँ, हर बार अपनी तालिका से पूछताछ करें
  • डेटा प्रकारों का मिश्रण . आप SQL मानक डेटा प्रकारों का उपयोग करने में सक्षम नहीं होंगे। क्योंकि आपका मान कॉलम इसमें सभी संग्रहीत मानों के लिए "सुपर-टाइप" होना चाहिए। इसका मतलब है - आपको सामान्य रूप से सभी डेटा को कच्चे तार . के रूप में संग्रहीत करना होगा . फिर आप देखेंगे कि तार के साथ तारीखों के साथ काम करना कितना दर्दनाक है, हर बार डेटा प्रकार कास्टिंग करना, डेटा अखंडता की जांच करना, आदि।
  • संदर्भात्मक सत्यनिष्ठा को लागू करना असंभव है . सामान्य स्थिति में, आप अपने मूल्यों को उन तक सीमित करने के लिए विदेशी कुंजी का उपयोग कर सकते हैं, जिन्हें मूल तालिका में परिभाषित किया गया है। लेकिन इस मामले में नहीं - ऐसा इसलिए है क्योंकि तालिका में प्रत्येक पंक्ति पर संदर्भात्मक अखंडता लागू होती है, लेकिन पंक्ति मानों के लिए नहीं। तो - आप इस लाभ को खो देंगे - और यह मौलिक में से एक . है डीबी के संबंध में
  • विशेषताओं के नाम सेट करना असंभव है . इसका मतलब है - आप डीबी स्तर पर विशेषता नाम को ठीक से प्रतिबंधित नहीं कर सकते हैं। उदाहरण के लिए, आप "customer_name" . लिखेंगे पहले मामले में विशेषता नाम के रूप में - और दूसरा डेवलपर इसे भूल जाएगा और "name_of_customer" का उपयोग करेगा . और.. ठीक है, DB उसे पास कर देगा और आप इस मामले को डीबग करने में बिताए घंटों के साथ समाप्त हो जाएंगे।

पंक्ति पुनर्निर्माण

इसके अलावा, सामान्य स्थिति में पंक्ति पुनर्निर्माण भयानक होगा। यदि आपके पास, उदाहरण के लिए, 5 विशेषताएँ हैं - जो कि 5 स्व-तालिका होंगी JOIN -एस। इस तरह के सरल के लिए बहुत बुरा - पहली नज़र में - मामला। इसलिए मैं यह कल्पना भी नहीं करना चाहता कि आप 20 विशेषताओं को कैसे बनाए रखेंगे।


क्या इसे उचित ठहराया जा सकता है?

मेरी बात है - नहीं। 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. mysql प्रत्येक पंक्ति में अन्य तालिका से पंक्तियों की संख्या दिखाएं

  2. Azure पर MySQL होस्टिंग, स्केलग्रिड पर पूरी तरह से प्रबंधित क्लाउड डेटाबेस सेवा लॉन्च

  3. PHP 7.0 पर Laravel 5.4:PDO अपवाद - ड्राइवर नहीं मिला (MySQL)

  4. MySQL में mm/dd/yyyy प्रारूप दिनांक सम्मिलित करना

  5. स्प्रिंग बूट जेपीए:समान पैरामीटर (जेपीक्यूएल) के लिए एकाधिक मान पास करना