Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để lưu trữ một mảng vào mysql?

Bạn có thể giải quyết vấn đề này như sau:

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)
);

Kết hợp khóa chính (comment_id, user_id) trên bảng giao nhau comments_votes sẽ ngăn người dùng bỏ phiếu nhiều lần cho cùng một nhận xét.

Hãy chèn một số dữ liệu vào lược đồ trên:

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');

Bây giờ chúng ta hãy thêm một số phiếu bầu cho người dùng 1:

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

Điều trên có nghĩa là người dùng 1 đã bỏ phiếu loại 1 cho nhận xét 1 và 2.

Nếu cùng một người dùng cố gắng bỏ phiếu lại cho một trong những nhận xét đó, cơ sở dữ liệu sẽ từ chối nó:

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

Nếu bạn sẽ sử dụng InnoDB công cụ lưu trữ, cũng sẽ là khôn ngoan khi sử dụng khóa ngoại các ràng buộc đối với comment_iduser_id các trường của bảng giao nhau. Tuy nhiên, lưu ý rằng MyISAM , công cụ lưu trữ mặc định trong MySQL, không thực thi các ràng buộc khóa ngoại:

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;

Các khóa ngoại này đảm bảo rằng một hàng trong comments_votes sẽ không bao giờ có comment_id hoặc user_id giá trị không tồn tại trong commentsusers bảng tương ứng. Các khóa ngoại không bắt buộc phải có cơ sở dữ liệu quan hệ đang hoạt động, nhưng chúng chắc chắn rất cần thiết để tránh các mối quan hệ bị hỏng và các hàng mồ côi (ví dụ: tính toàn vẹn của tham chiếu ).

Trên thực tế, tính toàn vẹn tham chiếu là một thứ gì đó sẽ rất khó thực thi nếu bạn lưu trữ các mảng được tuần tự hóa vào một trường cơ sở dữ liệu duy nhất.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ví dụ về ASCII () - MySQL

  2. MySQL INSERT INTO trực tiếp với mệnh đề WHERE

  3. Làm cách nào để tự động xóa các hàng dữ liệu khỏi bảng mysql sau 24 giờ kể từ khi dữ liệu vào bảng?

  4. Khi nào sử dụng utf-8 và khi nào sử dụng latin1 trong MySQL?

  5. Tại sao bản cập nhật MySQL này không hoạt động?