Memiliki semua tag dalam catatan yang berbeda (dinormalisasi) berarti Anda dapat mengganti nama tag dengan lebih mudah jika diperlukan dan melacak riwayat nama tag.
SO
, misalnya, berganti nama menjadi SQL Server
tag terkait setidaknya tiga kali (mssql
-> sqlserver
-> sql-server
).
Memiliki semua tag dalam satu catatan (denormalisasi) berarti Anda dapat mengindeks kolom ini dengan FULLTEXT
indeks dan cari posting yang memiliki dua atau lebih tag sekaligus:
SELECT *
FROM posts
WHERE MATCH(tags) AGAINST('+mma +ufc')
yang mungkin juga tetapi kurang efisien dengan desain yang dinormalisasi.
(Jangan lupa sesuaikan @ft_min_word_len
untuk mengindeks tag 3
karakter atau kurang agar ini berfungsi)
Anda dapat menggabungkan kedua desain:menyimpan tabel peta dan kolom yang didenormalisasi. Namun, ini akan membutuhkan lebih banyak perawatan.
Anda juga dapat menyimpan desain yang dinormalisasi dalam database Anda dan menggunakan kueri yang Anda berikan untuk memasukkan tag ke Sphinx
atau Lucene
.
Dengan cara ini, Anda dapat melakukan penggalian riwayat dengan MySQL
, pencarian tag teks lengkap menggunakan Sphinx
, dan tidak diperlukan perawatan tambahan.