Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Trzymanie wielu pozycji w kolumnie na mysql

Nie przechowuj topic_id w paper stół. Zamiast tego utwórz kolejną znormalizowaną tabelę (wiele do wielu), która łączy topic_id do 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)
);

Umożliwi to przechowywanie tylu tematów na papierze, ile potrzeba.

Aby pobrać tematy artykułu, użyj:

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>

Prawie nigdy nie jest dobrym pomysłem, aby próbować przechowywać wiele wartości w jednej kolumnie (takich jak rozdzielona przecinkami lista topic_id w paper stół). Powodem jest to, że aby wykonać zapytanie, musisz użyć FIND_IN_SET() co zwiększa złożoność wykonywania złączeń i uniemożliwia wykorzystanie indeksu kolumn podczas zapytań.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zamów MySQL przed Grupuj według

  2. Przewodnik po projektowaniu bazy danych dla systemu zarządzania pracownikami w MySQL

  3. Może być tylko jedna kolumna auto

  4. Problem C# MySqlParameter

  5. Skalowanie rozwiązań dla MySQL (replikacja, klastrowanie)