Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Halten mehrerer Elemente in einer Spalte auf mysql

topic_id nicht speichern im paper Tisch. Erstellen Sie stattdessen eine andere normalisierte (viele-zu-viele) Tabelle, die topic_id verknüpft zu 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)
);

Auf diese Weise können Sie so viele Themen wie nötig pro Papier speichern.

Um die Themen für eine Arbeit abzurufen, verwenden Sie:

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>

Es ist so gut wie nie eine gute Idee, zu versuchen, mehrere Werte in einer Spalte zu speichern (z. B. eine durch Kommas getrennte Liste von topic_id im paper Tisch). Der Grund dafür ist, dass Sie zum Abfragen FIND_IN_SET() was die Komplexität der Durchführung von Joins erhöht und es unmöglich macht, einen Spaltenindex beim Abfragen zu verwenden.