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

mysql पर एक कॉलम में एक से अधिक आइटम होल्ड करना

topic_idसंग्रहीत न करें paper . में टेबल। इसके बजाय, एक और सामान्यीकृत (कई-से-अनेक) तालिका बनाएं जो topic_id . को लिंक करे करने के लिए paper_id

/* Each paper can exist in this table as many times as necessary for all its topics */
CREATE TABLE paper_topics (
  paper_id INT NOT NULL,
  topic_id INT NOT NULL,
  FOREIGN KEY (paper_id) REFERENCES paper (paper_id),
  FOREIGN KEY (topic_id) REFERENCES topic (topic_id),
  PRIMARY KEY (paper_id, topic_id)
);

यह आपको प्रति पेपर जितने आवश्यक हो उतने विषयों को संग्रहीत करने की अनुमति देगा।

एक पेपर के लिए विषयों को पुनः प्राप्त करने के लिए, उपयोग करें:

SELECT 
  paper.*,
  topic_name
FROM 
  paper
  LEFT JOIN paper_topics ON paper.paper_id = topic.paper_id
  LEFT JOIN topic ON topic.topic_id = paper_topic.topic_id
WHERE paper.paper_id = <some paper id value>

एक कॉलम में एकाधिक मानों को संग्रहीत करने का प्रयास करना कभी भी एक अच्छा विचार नहीं है (जैसे topic_id की अल्पविराम से अलग की गई सूची paper . में टेबल)। इसका कारण यह है कि इसके विरुद्ध क्वेरी करने के लिए, आपको FIND_IN_SET() जो जॉइन करने की जटिलता को बढ़ाता है और क्वेरी करते समय कॉलम इंडेक्स का उपयोग करना असंभव बना देता है।



  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 लेनदेन

  3. 2 टेबल में संयोजन और खोज के लिए MySQL अनुरोध

  4. MYSQL लेफ्ट जॉइन ग्रुप बाय के साथ

  5. एक निश्चित तिथि से शुरू होने वाले 7 दिनों के अंतराल से पंक्तियों को समूहित करें