Лучший способ хранить теги в таблице сервера SQL? - PullRequest
15 голосов
/ 28 сентября 2008

Какой лучший способ хранить теги для записи? Просто использовать поле varchar? Как насчет выбора строк, содержащих тег x? Используйте оператор like?

спасибо!

Ответы [ 4 ]

14 голосов
/ 28 сентября 2008

Зависит от двух вещей:
1) Количество тегов / записей с тегами
2) Есть ли у вас религиозное мнение о нормализации: -)

Если не иметь дело с очень большими объемами данных, я бы предложил использовать таблицу «Теги», отображающую значения varchar в целочисленные идентификаторы, а во вторую таблицу отображать тегированные записи в их идентификаторы тегов. Я бы предложил сначала реализовать это, а затем проверить, не соответствует ли оно вашим требованиям к производительности. В этом случае сохраните одну таблицу с идентификатором для строки с тегом и фактическим текстом тега, но в этом случае я бы предложил использовать столбец char, поскольку он убьет ваш запрос, если оптимизатор выполнит полное сканирование таблицы по большой стол с колонной Varchar.

6 голосов
/ 28 сентября 2008

Некоторые идеи и тесты только для вас: http://tagging.pui.ch/post/37027746608/tagsystems-performance-tests

3 голосов
/ 28 сентября 2008

Используйте таблицу тегов с наименьшим допустимым первичным ключом. Если тегов меньше 255, используйте байт (tinyint) или слово (smallint). Чем меньше ключ, тем меньше и быстрее индекс внешнего ключа в основной таблице.

3 голосов
/ 28 сентября 2008

Нет, обычно плохая идея помещать несколько фрагментов данных в одно поле. Вместо этого используйте отдельную таблицу тегов (возможно, только с TagID и TagName), а затем для каждой записи укажите связанный с ней TagID. Если запись связана с несколькими тегами, у вас будут дубликаты записей, единственное отличие будет в TagID.

Преимущество здесь в том, что вы можете легко запрашивать по тегам, по записям и вести таблицу тегов отдельно (т.е. что делать, если имя тега изменяется?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...