Какой лучший способ хранить теги для записи? Просто используйте поле varchar? Как насчет выбора строк, содержащих тег x? Использовать аналогичный оператор?
спасибо!
Какой лучший способ хранить теги для записи? Просто используйте поле varchar? Как насчет выбора строк, содержащих тег x? Использовать аналогичный оператор?
спасибо!
Зависит от двух вещей:
1) Количество тегов/помеченных записей
2) Имеете ли вы религиозное мнение о нормализации:-)
Если вы не имеете дело с очень большими объемами данных, я бы предложил иметь таблицу "тегов", отображающую значения varchar для идентификаторов целого числа, а затем вторую таблицу, привязывающую помеченные записи к их идентификаторам тегов. Я бы предложил реализовать это сначала, а затем проверить, не соответствует ли он вашим потребностям в производительности. В этом случае сохраните одну таблицу с идентификатором для помеченной строки и фактическим текстом тега, но в этом я бы предложил использовать столбец char, поскольку он убьет ваш запрос, если оптимизатор выполнит полную таблицу сканируйте большую таблицу с столбцом varchar.
Некоторые идеи и тесты только для вас: http://tagging.pui.ch/post/37027746608/tagsystems-performance-tests
Нет, как правило, это плохая идея поместить несколько частей данных в одно поле. Вместо этого используйте отдельную таблицу тегов (возможно, только с TagID и TagName), а затем для каждой записи укажите связанный с ней TagID. Если запись связана с несколькими тегами, вы будете иметь дубликаты записей, с той лишь разницей, что TagID.
Преимущество в том, что вы можете легко запросить тег, по записи и сохранить таблицу тегов отдельно (т.е. что, если имя тега меняется?).
Используйте таблицу тегов с наименьшим допустимым первичным ключом. Если количество меток меньше 255, используйте байты (tinyint) или слово (smallint). Чем меньше ключ, тем меньше и быстрее индекс на внешнем ключе в главной таблице.