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

एक सरणी को MySQL में कैसे स्टोर करें?

आप इस तरह से निपटना चाहेंगे:

CREATE TABLE comments (
    comment_id int, 
    body varchar(100), 
    PRIMARY KEY (comment_id)
);

CREATE TABLE users (
    user_id int, 
    username varchar(20), 
    PRIMARY KEY (user_id)
);

CREATE TABLE comments_votes (
    comment_id int, 
    user_id int, 
    vote_type int, 
    PRIMARY KEY (comment_id, user_id)
);

समग्र प्राथमिक कुंजी (comment_id, user_id) इंटरसेक्शन टेबल पर comments_votes उपयोगकर्ताओं को एक ही टिप्पणी पर कई बार मतदान करने से रोकेगा।

आइए ऊपर दिए गए स्कीमा में कुछ डेटा डालें:

INSERT INTO comments VALUES (1, 'first comment');
INSERT INTO comments VALUES (2, 'second comment');
INSERT INTO comments VALUES (3, 'third comment');

INSERT INTO users VALUES (1, 'user_a');
INSERT INTO users VALUES (2, 'user_b');
INSERT INTO users VALUES (3, 'user_c');

अब उपयोगकर्ता 1 के लिए कुछ वोट जोड़ें:

INSERT INTO comments_votes VALUES (1, 1, 1);
INSERT INTO comments_votes VALUES (2, 1, 1);

उपरोक्त का अर्थ है कि उपयोगकर्ता 1 ने टिप्पणी 1 और 2 पर टाइप 1 का वोट दिया।

यदि वही उपयोगकर्ता उन टिप्पणियों में से किसी एक पर फिर से वोट करने का प्रयास करता है, तो डेटाबेस उसे अस्वीकार कर देगा:

INSERT INTO comments_votes VALUES (1, 1, 1);
ERROR 1062 (23000): Duplicate entry '1-1' for key 'PRIMARY'

यदि आप InnoDB का उपयोग कर रहे हैं भंडारण इंजन, विदेशी कुंजी का उपयोग करना भी बुद्धिमानी होगी comment_id . पर प्रतिबंध और user_id चौराहे की मेज के क्षेत्र। हालांकि ध्यान दें कि MyISAM , MySQL में डिफ़ॉल्ट स्टोरेज इंजन, विदेशी कुंजी बाधाओं को लागू नहीं करता है:

CREATE TABLE comments (
    comment_id int, 
    body varchar(100), 
    PRIMARY KEY (comment_id)
) ENGINE=INNODB;

CREATE TABLE users (
    user_id int, 
    username varchar(20), 
    PRIMARY KEY (user_id)
) ENGINE=INNODB;

CREATE TABLE comments_votes (
    comment_id int, 
    user_id int, 
    vote_type int, 
    PRIMARY KEY (comment_id, user_id),
    FOREIGN KEY (comment_id) REFERENCES comments (comment_id),
    FOREIGN KEY (user_id) REFERENCES users (user_id)
) ENGINE=INNODB;

ये विदेशी कुंजियाँ गारंटी देती हैं कि comments_votes . में एक पंक्ति कभी भी कोई comment_id नहीं होगा या user_id मान जो comments . में मौजूद नहीं है और users टेबल, क्रमशः। काम करने वाले रिलेशनल डेटाबेस के लिए विदेशी कुंजियों की आवश्यकता नहीं होती है, लेकिन टूटे हुए रिश्तों और अनाथ पंक्तियों से बचने के लिए वे निश्चित रूप से आवश्यक हैं (यानी। संदर्भात्मक अखंडता )।

वास्तव में, रेफरेंशियल अखंडता एक ऐसी चीज है जिसे लागू करना बहुत मुश्किल होता यदि आप क्रमबद्ध सरणियों को एक एकल डेटाबेस फ़ील्ड में संग्रहीत करते।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. विभिन्न डेटा प्रकारों के उत्तरों के साथ सर्वेक्षण के लिए SQL डिज़ाइन

  2. MySQL डेटाबेस में IP पता संग्रहीत करना (IPv4 और IPv6)

  3. टेबल-लेवल लॉकिंग बड़ी टेबल के लिए रो-लेवल लॉकिंग से बेहतर क्यों है?

  4. Percona XtraDB क्लस्टर Kubernetes ऑपरेटर का अवलोकन

  5. MySQL में अनेक-से-अनेक संबंध में चयन करें