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

एकाधिक तालिकाओं के बीच SQL कई-से-अनेक संबंध

हाँ, वहाँ सब कुछ ठीक लग रहा है। लेकिन...

कुछ नोट्स:

हम gender . के लिए एक छोटे डेटाटाइप का उपयोग करेंगे कॉलम; मुझे नहीं लगता कि इसे व्यक्त करने के लिए हमें 255 वर्णों की आवश्यकता होगी। (एक पंक्ति के अधिकतम आकार की एक सीमा होती है जिसे लागू किया जाता है।) यदि उसके लिए केवल कुछ मान हैं, तो हम ENUM पर विचार करेंगे। डेटाटाइप।

हम संभावित रूप से NOT NULL भी जोड़ेंगे उन स्तंभों में से कई पर बाधाएं, जैसे कि हेरोनाम, प्रथम नाम, अंतिम नाम। हम संभवतः DEFAULT '' . भी जोड़ेंगे . कभी-कभी, हमें वास्तव में किसी कारण से NULL मानों को अनुमति देने की आवश्यकता होती है, लेकिन हम NOT NULL . का उपयोग करते हैं हम जहां भी कर सकते हैं।

मैं TEXT . के बारे में झिझक रहा हूं स्तंभ। TEXT . का उपयोग करने में कुछ भी गलत नहीं है डेटाटाइप, लेकिन मुझे संदेह है कि वे कुछ ऐसी जानकारी को "छिपा" सकते हैं जिन्हें अतिरिक्त कॉलम में बेहतर तरीके से संग्रहीत किया जा सकता है।

विदेशी कुंजियों के लिए, हम अपने द्वारा उपयोग किए जाने वाले पैटर्न का अनुसरण करते हुए बाधाओं को एक नाम निर्दिष्ट करेंगे, और संभवत:ON UPDATE CASCADE ON DELETE CASCADE भी जोड़ेंगे।

CONSTRAINT FK_superheroPower_power FOREIGN KEY (powerID) 
  REFERENCES power(id) ON UPDATE CASCADE ON DELETE CASCADE

पहचानकर्ताओं के बारे में एक नोट (तालिका नाम और स्तंभ नाम)

जिस तरह से हम इसे करते हैं, सभी टेबल नाम लोअर केस हैं . (हमारे पास एक MySQL विकल्प सेट है जो सभी टेबल नामों को लोअर केस में मजबूर करता है।) हम विभिन्न ऑपरेटिंग सिस्टम/फाइल सिस्टम के लिए असंगतता के मुद्दों से बचने के लिए ऐसा करते हैं (जिनमें से कुछ केस संवेदनशील हैं, और कुछ नहीं हैं)।

साथ ही, तालिका के नाम एकवचन हैं . तालिका का नाम क्या नाम देता है एक पंक्ति तालिका का प्रतिनिधित्व करता है। हम _table . भी शामिल नहीं करते हैं नाम के हिस्से के रूप में।

MySQL में कॉलम नाम कभी भी केस सेंसिटिव नहीं होते हैं, लेकिन हम हमेशा कॉलम नामों के लिए भी लोअर केस का उपयोग करते हैं। हम अपने कॉलम नामों को "CamelCase" नहीं करते हैं, हम विभाजक के रूप में अंडरस्कोर वर्ण का उपयोग करते हैं, उदा। power_id बनाम powerID , hero_name बनाम heroName

अनुसरण करें

ऊपर मेरे "नोट्स" विशिष्ट नियम नहीं हैं जिनका पालन किया जाना चाहिए; वे सिर्फ पैटर्न हैं जिनका हम उपयोग करते हैं।

इन पैटर्नों का पालन करने से यह गारंटी नहीं मिलती कि हमारे पास एक सफल सॉफ्टवेयर होगा, लेकिन यह हमारी मदद करता है।

आपके संदर्भ के लिए, मैं दिखाऊंगा कि ये टेबल हमारी दुकान से "फर्स्ट कट" के रूप में कैसे दिखेंगे, दूसरे पैटर्न के उदाहरण के रूप में; यह नहीं है "सही रास्ता", यह सिर्फ "एक तरीका" है जिसे हमने एक टीम के रूप में तय किया है।

CREATE TABLE superhero
( id               INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'pk'
, hero_name        VARCHAR(255) NOT NULL                COMMENT ''
, first_name       VARCHAR(255) NOT NULL DEFAULT ''     COMMENT ''
, last_name        VARCHAR(255) NOT NULL DEFAULT ''     COMMENT ''
, first_appearance DATE                                 COMMENT 'date superhero first appeared'
, gender           ENUM('female','male','other')        COMMENT 'female,male or other'
, biography_text   TEXT                                 COMMENT ''
, universe         VARCHAR(255)                         COMMENT ''
, PRIMARY KEY(id)
, UNIQUE KEY superhero_UX1 (hero_name) 
) ENGINE=InnoDB;

CREATE TABLE power
( id               INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'pk'
, name             VARCHAR(255) NOT NULL                COMMENT ''  
, description_text TEXT NOT NULL                        COMMENT '' 
, PRIMARY KEY(id)
, UNIQUE KEY power_UX1 (name)
) ENGINE=InnoDB;

CREATE TABLE superheropower
( superhero_id   INT UNSIGNED NOT NULL         COMMENT 'pk, fk ref superhero'
, power_id       INT UNSIGNED NOT NULL         COMMENT 'pk, fk ref power'
, PRIMARY KEY(superhero_id, power_id)
, CONSTRAINT FK_superheropower_superhero 
     FOREIGN KEY(superhero_id) REFERENCES superhero(id)
     ON UPDATE CASCADE ON DELETE CASCADE
, CONSTRAINT FK_superheropower_power
     FOREIGN KEY (power_id) REFERENCES power(id) 
     ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक क्वेरी के साथ कई पंक्तियों को अपडेट करें?

  2. MySQL डेटाबेस में चेकबॉक्स मान संग्रहीत करने का सबसे अच्छा तरीका क्या है?

  3. अनुयायी/निम्नलिखित डेटाबेस संरचना

  4. MySQL में पदानुक्रमित प्रश्न

  5. JSON के माध्यम से Android से सर्वर पर डेटा भेजें