sql >> Database teknologi >  >> RDS >> Mysql

Holder flere elementer i en kolonne på mysql

Gem ikke topic_id i paper bord. Opret i stedet en anden normaliseret (mange-til-mange) tabel, som linker topic_id til 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)
);

Dette giver dig mulighed for at gemme så mange emner pr. papir som nødvendigt.

For at hente emnerne til et papir, skal du bruge:

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>

Det er næsten aldrig en god idé at forsøge at gemme flere værdier i én kolonne (såsom en kommasepareret liste over topic_id i paper bord). Årsagen er, at for at forespørge imod det, skal du bruge FIND_IN_SET() hvilket øger kompleksiteten ved at udføre joinforbindelser og gør det umuligt at bruge et kolonneindeks ved forespørgsler.



  1. FROM_UNIXTIME() Eksempler – MySQL

  2. Kompilering af PL/Proxy med PostgresPlus Advance Server 9.1

  3. Sorter efter ugedag fra mandag til søndag

  4. WHERE_IN-forespørgsel med en sammensat nøgle?