Каков более эффективный способ обработки тегов в базе данных? - PullRequest
1 голос
/ 23 августа 2011

Эффективнее ли использовать поле taglist со всеми тегами, разделенными пробелом, или использовать еще 2 таблицы (tag: tagid tagtext, tagitem: tagid, itemid)?

Ответы [ 4 ]

3 голосов
/ 23 августа 2011

Эффективность во многом зависит от того, что вы делаете. Если вы хотите выполнять запрос на основе имени тега, возможно, будет быстрее, если у вас есть таблица тегов с идентификатором, указанным в таблице тегов и элементов (т. Е. Опция # 2). Однако, если у вас нет тысячи строк, это, вероятно, не будет иметь значения. Если у вас совсем не так много тегов, разница будет еще меньше.

Однако, если вы хотите получить теги по идентификаторам элементов, первый метод намного быстрее. Опять же, я сомневаюсь, что вы заметите.

Есть и другие соображения: целостность данных и нормализация. Если вы используете две таблицы и внешние ключи, вам будет намного проще, если ваш набор тегов будет соответствовать элементам. Если тег удален и вы используете только одну таблицу, старые элементы будут по-прежнему иметь старые теги. Кроме того, гораздо проще получить список уникальных тегов и поддерживать его согласованность. Если у вас есть теги в другой таблице, это открывает целый новый мир организации: вы можете создавать временные метки для создания и изменения тегов, отмечать теги как активные или неактивные (и, возможно, другие статусы) и т. Д.

1 голос
/ 23 августа 2011

Второй вариант. Храните теги отдельно. Вы не сможете писать хорошие запросы для поиска по определенному тегу, если будете хранить их в одном поле. Вы не хотите использовать MATCH или LIKE для фильтрации по тегам. Храня их в отдельной таблице, вы можете легко найти нужные теги, а также соответствующие статьи. Ваши таблицы должны быть правильно проиндексированы.

Никогда не храните разделенные запятыми / пробелами / другими значениями значения в базе данных, если вам нужно запросить эти значения. Вся суть базы данных состоит в том, чтобы хранить данные в структурированном виде. Таким образом, база данных может в значительной степени оптимизировать поиск этих данных.

0 голосов
/ 23 августа 2011

Вторая версия, для разделения данных на две дополнительные таблицы, намного эффективнее, поскольку она позволяет базе данных использовать индексы для выполнения запросов, которые вам в основном нужны (Get all texts with a certain tag, get a count of how often the tags are used sorted by count для облака тегов, и get all tags for the given text)

0 голосов
/ 23 августа 2011

Одна таблица будет более эффективной, но, как правило, наличие двух таблиц является правильным способом хранения простых тегов.

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