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 сървър след инсталиране на XAMPP на Mac OS

  2. Незаконен микс от съпоставяния за операция „like“, докато търсите с Ignited-Datatables

  3. MySQL групиране по седмица, въз основа на колона за дата?

  4. Детерминистична функция в mysql

  5. Класът 'mysqli_connect' не е намерен