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

Giữ nhiều mục trong một cột trên mysql

Không lưu trữ topic_id trong paper bàn. Thay vào đó, hãy tạo một bảng chuẩn hóa khác (nhiều thành nhiều) liên kết topic_id thành 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)
);

Điều này sẽ cho phép bạn lưu trữ nhiều chủ đề trên mỗi tờ giấy nếu cần.

Để lấy các chủ đề cho một bài báo, hãy sử dụng:

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>

Việc cố gắng lưu trữ nhiều giá trị trong một cột không bao giờ là một ý tưởng hay (chẳng hạn như danh sách topic_id được phân tách bằng dấu phẩy trong paper bàn). Lý do là để truy vấn nó, bạn phải sử dụng FIND_IN_SET() điều này làm tăng độ phức tạp của việc thực hiện các phép nối và khiến bạn không thể sử dụng chỉ mục cột khi truy vấn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dữ liệu thực tế trong db mysql được lưu trữ trên máy linux ở đâu?

  2. PHP - Truy vấn MySQL với Pagination

  3. Tôi có thể sử dụng MySQL LOAD XML LOCAL INFILE nếu các hàng của tôi không có 'tên' không?

  4. Nhận uuid được tạo sau khi chèn php

  5. (Các) đặc quyền SUPER cho hoạt động này