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

डेटाबेस डिज़ाइन / सामान्यीकरण संरचना में ANDs, ORs, वैकल्पिक तत्व और उनके संबंध शामिल होने चाहिए

एक बहुत ही सरल, पहला तरीका सिर्फ 4 टेबल का उपयोग करना होगा:

TABLE Course 
( CourseId 
, Title 
, TotalCredits 
, ... other stuff
, PRIMARY KEY (CourseId)
) ;

TABLE Module 
( ModuleId 
, Description 
, Hours
, Credits
, ... other stuff
, PRIMARY KEY (ModuleId)
) ;

और इन 2 के माध्यम से अनुमत संयोजन:

TABLE Course_Module 
( CourseID                 --- for this course
, ModuleID                 --- this module is allowed (optional or mandatory)
, PRIMARY KEY (CourseID, ModuleId)
, FOREIGN KEY (CourseId) 
    REFERENCES Course (CourseId)
, FOREIGN KEY (ModuleId)
    REFERENCES Module (ModuleId)
) ;

TABLE Course_MandatoryModule 
( CourseID                  --- for this course
, ModuleID                  --- this module is mandatory
, PRIMARY KEY (CourseID, ModuleId)
, FOREIGN KEY (CourseID, ModuleId)
    REFERENCES Course_Module (CourseID, ModuleId)
) ;

अब, यदि आपके द्वारा अनुमत मॉड्यूल और पाठ्यक्रमों के संयोजन अधिक जटिल हैं, जैसा कि आपके विवरण से पता चलता है, Course_Module के बजाय और Course_MandatoryModule टेबल आप एक जटिल पदानुक्रमित मॉडल को परिभाषित कर सकते हैं:

पाठ्यक्रम:

TABLE Course                        --- same as previous model
( CourseId 
, Title 
, TotalCredits 
, ... other stuff
, PRIMARY KEY (CourseId)
) ;

(मॉड्यूल) के मॉड्यूल और समूह:

TABLE ModuleEntity                  --- the supertype for both
( ModuleEntityId                    --- modules and group of modules
, PRIMARY KEY (ModuleEntityId)
) ;

TABLE Module                        --- subtype
( ModuleId 
, Description 
, Hours
, Credits
, ... other stuff
, PRIMARY KEY (ModuleId)
, FOREIGN KEY (ModuleId) 
    REFERENCES ModuleEntity (ModuleEntityId)
) ;

TABLE ModuleGroup                  --- group of modules
( ModuleGroupId                    --- subtype of the supertype (entity)
, GroupDescription        
, PRIMARY KEY (ModuleGroupId)
, FOREIGN KEY (ModuleGroupId) 
    REFERENCES ModuleEntity (ModuleEntityId)
) ;

और संबंध (मॉड्यूल समूह के अंतर्गत आता है):

TABLE Module_in_Group  
( ModuleEntityId               --- this module or group
, ModuleGroupId                --- is in this group
, PRIMARY KEY (ModuleEntityId, ModuleGroupID)
, FOREIGN KEY (ModuleEntityId)
    REFERENCES ModuleEntity (ModuleEntityId)
, FOREIGN KEY (ModuleGroupId)
    REFERENCES ModuleGroup (ModuleGroupId)
) ;

और (आखिरकार) पाठ्यक्रम में मॉड्यूल का समूह हो सकता है:

TABLE Course_ModuleGroup
( CourseId                 --- for this course
, ModuleGroupId            --- this module group is allowed
, PRIMARY KEY (CourseID, ModuleGroupId)
, FOREIGN KEY (CourseId) 
    REFERENCES Course (CourseId)
, FOREIGN KEY (ModuleGroupId)
    REFERENCES ModuleGroup (ModuleGroupId)
) ;


  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. डिस्काउंट कोड सिस्टम बनाना (MySQL/php)

  3. ग्लासफ़िश सर्वर पर किसी वेब सेवा में डेटाबेस का उपयोग करने के लिए 'कोई उपयुक्त ड्राइवर नहीं मिला' त्रुटि

  4. Doctrine2 ORM अपडेट के लिए चुनें

  5. आंशिक अनुक्रमणिका या फ़िल्टर किए गए अनुक्रमणिका के लिए MySQL में समाधान?