sql >> Databáze >  >> RDS >> Mysql

Držení více položek ve sloupci na mysql

Neukládejte topic_id v paper stůl. Místo toho vytvořte jinou normalizovanou tabulku (mnoho-k-many), která spojuje topic_id na 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)
);

To vám umožní uložit tolik témat na papír, kolik je potřeba.

Chcete-li získat témata pro referát, použijte:

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>

Zkoušet uložit více hodnot do jednoho sloupce (jako je seznam topic_id oddělený čárkou) není nikdy dobrý nápad v paper stůl). Důvodem je to, že pro dotazování musíte použít FIND_IN_SET() což zvyšuje složitost provádění spojení a znemožňuje použití indexu sloupců při dotazování.



  1. Čas a datum razítko v řádku tabulky MySQL

  2. Jak postupovat při ochraně souborů před neoprávněným stahováním

  3. Vyberte položky z různých zdrojů a seřaďte je podle data

  4. Jak používat Regexp v MySQL Replace Commands?