Лучший способ хранить теги в таблице сервера sql?
-
02-07-2019 - |
Вопрос
Как лучше всего хранить теги для записей?Просто использовать поле varchar?А как насчет выбора строк, содержащих тег x?Использовать оператор Like?
Спасибо!
Решение
Зависит от двух вещей:
1) Количество тегов/записей с тегами
2) Имеете ли вы религиозное мнение о нормализации или нет :-)
Если вы не имеете дело с очень большими объемами данных, я бы предложил иметь таблицу «Теги», сопоставляющую значения varchar с целочисленными идентификаторами, а затем вторую таблицу, сопоставляющую помеченные записи с их идентификаторами тегов.Я бы предложил сначала реализовать это, а затем проверить, не соответствует ли это вашим потребностям в производительности.В этом случае сохраните одну таблицу с идентификатором помеченной строки и фактическим текстом тега, но в этом случае я бы предложил вам использовать столбец char, поскольку он уничтожит ваш запрос, если оптимизатор выполнит полное сканирование таблицы по большая таблица со столбцом varchar.
Другие советы
Несколько идей и тестов специально для вас: http://tagged.pui.ch/post/37027746608/tagsystems- Performance-tests
Нет, обычно это плохая идея помещать несколько фрагментов данных в одно поле.Вместо этого используйте отдельную таблицу тегов (возможно, содержащую только идентификатор тега и имя тега), а затем для каждой записи укажите связанный с ней идентификатор тега.Если запись связана с несколькими тегами, у вас будут повторяющиеся записи с той лишь разницей, что это TagID.
Преимущество здесь в том, что вы можете легко выполнять запросы по тегам, по записям и хранить таблицу тегов отдельно (т. е.что, если имя тега изменится?).
Используйте таблицу тегов с наименьшим допустимым первичным ключом.Если тегов меньше 255, используйте байт (tinyint) или слово (smallint).Чем меньше ключ, тем меньше и быстрее индекс внешнего ключа в основной таблице.