Jangan simpan topic_id
dalam paper
meja. Sebagai gantinya, buat tabel lain yang dinormalisasi (banyak ke banyak) yang menautkan topic_id
ke 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)
);
Ini akan memungkinkan Anda untuk menyimpan sebanyak mungkin topik per kertas yang diperlukan.
Untuk mengambil topik untuk makalah, gunakan:
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>
Hampir tidak pernah merupakan ide yang baik untuk mencoba menyimpan beberapa nilai dalam satu kolom (seperti daftar topic_id
yang dipisahkan koma) dalam paper
meja). Alasannya adalah untuk melakukan kueri terhadapnya, Anda harus menggunakan FIND_IN_SET()
yang meningkatkan kerumitan dalam melakukan penggabungan dan tidak memungkinkan untuk menggunakan indeks kolom saat membuat kueri.