Posiadanie wszystkich tagów w różnych rekordach (znormalizowanych) oznacza, że w razie potrzeby będziesz mógł łatwiej zmieniać nazwy tagów i śledzić historię nazw tagów.
SO
, na przykład przemianowana na SQL Server
powiązane tagi co najmniej trzy razy (mssql
-> sqlserver
-> sql-server
).
Posiadanie wszystkich tagów w jednym rekordzie (zdenormalizowanym) oznacza, że możesz indeksować tę kolumnę za pomocą FULLTEXT
indeksuj i szukaj postów posiadających dwa lub więcej tagów jednocześnie:
SELECT *
FROM posts
WHERE MATCH(tags) AGAINST('+mma +ufc')
co jest również możliwe, ale mniej wydajne przy znormalizowanym projekcie.
(Nie zapomnij dostosować @ft_min_word_len
do indeksowania tagów 3
znaków lub mniej, aby to zadziałało)
Możesz łączyć oba projekty:przechowywać zarówno tabelę map, jak i zdenormalizowaną kolumnę. Będzie to jednak wymagało większej konserwacji.
Możesz również przechowywać znormalizowany projekt w swojej bazie danych i użyć podanego zapytania, aby przekazać tagi do Sphinx
lub Lucene
.
W ten sposób możesz kopać historię za pomocą MySQL
, pełnotekstowe wyszukiwanie tagów za pomocą Sphinx
i nie będą wymagane żadne dodatkowe czynności konserwacyjne.