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

डेटाबेस को सामान्यीकरण और मापनीयता को ध्यान में रखते हुए तालिका कॉलम में टेक्स्टुअल आइडेंटिफ़ायर का उपयोग करने पर आपकी क्या राय है?

पहला अधिक सामान्यीकृत है, अगर थोड़ा अधूरा है। आप कुछ दृष्टिकोण अपना सकते हैं, सबसे सरल (और कड़ाई से बोलते हुए, सबसे 'सही') को स्पष्ट FK बाधा के साथ दो तालिकाओं की आवश्यकता होगी।

commentid ---- subjectid ----- idType
--------------------------------------
1                22            post
2                26            photo
3                84            reply
4                36            post
5                22            status

idType
------
post
photo
reply
status

यदि आप चाहें, तो आप कुंजी/सूचकांक लंबाई पर वर्चर के प्रभाव को कम करने के लिए char(1) या इसी तरह का उपयोग कर सकते हैं, या यदि आप एक का उपयोग करने की योजना बना रहे हैं तो ओआरएम के साथ उपयोग की सुविधा के लिए। NULL हमेशा परेशान करते हैं, और यदि आप उन्हें अपने डिजाइन में बदलते हुए देखना शुरू करते हैं, तो बेहतर होगा कि आप उन्हें खत्म करने का एक सुविधाजनक तरीका समझ सकें।

दूसरा तरीका वह है जिसे मैं 100 मिलियन से अधिक पंक्तियों के साथ काम करते समय पसंद करता हूं:

commentid ---- subjectid
------------------------
1                22    
2                26     
3                84     
4                36     
5                22     

postIds ---- subjectid
----------------------
1                22   
4                36   

photoIds ---- subjectid
-----------------------
2                26    

replyIds ---- subjectid
-----------------------
3                84    

statusIds ---- subjectid
------------------------
5                22     

निश्चित रूप से (थोड़ा असामान्य) हाइब्रिड दृष्टिकोण भी है, जिसका मैं बड़े डेटासेट के साथ बड़े पैमाने पर उपयोग करता हूं, क्योंकि वे गंदे होते हैं। बस पूर्व-निर्धारित idTypes के लिए विशेषज्ञता तालिकाएँ प्रदान करें, लेकिन एक तदर्थ idType स्तंभ को commentId तालिका पर रखें।

ध्यान दें कि यहां तक ​​कि संकर दृष्टिकोण के लिए केवल 2x अपसामान्यीकृत तालिका के स्थान की आवश्यकता होती है; और idType द्वारा तुच्छ क्वेरी प्रतिबंध प्रदान करता है। हालांकि अखंडता बाधा सीधे आगे नहीं है, टाइप-टेबल के व्युत्पन्न यूनियन पर एफके बाधा होने के नाते। मेरा सामान्य तरीका यह है कि या तो हाइब्रिड टेबल पर ट्रिगर का उपयोग किया जाए, या अपडेट को सही सब-टाइप टेबल में अपडेट करने के लिए समकक्ष-अपडेट करने योग्य-व्यू का उपयोग किया जाए।

सरल दृष्टिकोण और अधिक जटिल उप-प्रकार तालिका दृष्टिकोण दोनों काम करते हैं; फिर भी, अधिकांश उद्देश्यों के लिए KISS लागू होता है, इसलिए मुझे संदेह है कि आपको शायद केवल एक ID_TYPES तालिका, प्रासंगिक FK पेश करनी चाहिए, और इसके साथ किया जाना चाहिए।




  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:mysql निर्देशिका का स्वामित्व linux सर्वर रिबूट पर 'service_account' से 'mysql' में बदल जाता है

  2. PHP+MySQL में लोकप्रिय शब्द प्राप्त करें

  3. MySQL में SQL स्क्रिप्ट कैसे चलाएं?

  4. फ़िल्टरिंग के लिए टाइमडेल्टा ऑब्जेक्ट बनाने के लिए SQLAlchemy Integer फ़ील्ड का उपयोग करना

  5. MySQL समूह तिथि के अनुसार और लापता तिथियों सहित गिनती