sql >> Databasteknik >  >> RDS >> Mysql

Håller flera objekt i en kolumn på mysql

Lagra inte topic_id i paper tabell. Skapa istället en annan normaliserad (många-till-många) tabell som länkar topic_id till 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)
);

Detta gör att du kan lagra så många ämnen per papper som behövs.

För att hämta ämnena för en uppsats, använd:

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 är nästan aldrig en bra idé att försöka lagra flera värden i en kolumn (som en kommaseparerad lista med topic_id i paper tabell). Anledningen är att för att fråga mot det måste du använda FIND_IN_SET() vilket ökar komplexiteten i att utföra kopplingar och gör det omöjligt att använda ett kolumnindex vid frågor.



  1. Hitta trasiga objekt i SQL Server

  2. SQL Server Error - HRESULT E_FAIL har returnerats från ett anrop till en COM-komponent

  3. Hur man skriver ut Datagridview har en tabell i VB

  4. MySQL DROP UTLANDSNYCKEL Begränsning