Как хранить эти описания полей в MySQL? - PullRequest
0 голосов
/ 20 января 2011

Извиняюсь за длинную тему, я не собирался быть такой длинной, но это довольно простая проблема, с которой я столкнулся. :)

Допустим, у вас есть простая таблица с именем tags, в которой есть столбцы tag_id и tag. Tag_id - это просто столбец с автоинкрементом, а тег - это заголовок тега. Если мне нужно добавить поле описания, это будет в среднем около 1-2 абзацев (возможно, максимум около 3-4 абзацев), следует ли просто добавить поле описания в таблицу или создать новую таблицу с именем tag_description и сохранить описания с tag_id?

Я помню, что читал, что лучше сделать это, потому что если вы делаете запрос, который не выбирает описание, это поле описания все равно будет замедлять работу mysql. Это правда? Я даже не помню, откуда я это читал, но я уже несколько лет следил за этим ... Наконец, я спрашиваю, нужно ли мне это делать, у меня такое чувство, что я этого не делаю. Вам также потребуется внутреннее объединение всякий раз, когда вам нужно поле описания.

Другой вопрос, который у меня возникает, - это, как правило, плохо создавать новые таблицы, которые будут содержать максимум максимум строк? Что, если эти данные больше никуда не уместятся?

У меня есть простой пример, который относится к этим двум вопросам.

У меня есть три таблицы content, tags и content_tags, которые составляют отношение многие ко многим:

содержание

  • content_id
  • регион (enum столбец с около 6-7 разных значений и большинство скорее всего не будет расти позже)

метка

  • tag_id
  • бирка

content_tags

  • content_id
  • tag_id

Я хочу хранить описание в 1-2 абзацах для каждого тега, но также для каждого региона. Мне интересно, что было бы лучшим способом сделать это?

Вариант A:

  • Просто добавьте столбец описания к таблица тегов
  • Создать новую таблицу для region_descriptions

Вариант B:

  • Создать новую таблицу с именем описания с полями: id, описание и тип
  • Идентификатор будет идентификатором содержимого или id поля enum
  • Тип будет ли это тег описание или описание региона (Будет использовать для этого столбец enum)

Может быть, есть первичный ключ для идентификатора и типа?

Вариант C:

  • Создать новую таблицу для tag_description
  • Создать новую таблицу для region_description

Опция A представляется хорошим выбором, если добавление столбца описания не замедляет запросы на выборку mysql, которые не нуждаются в описании.

Если предположить, что столбец описания замедлит работу mysql, вариант B может быть хорошим выбором. Это также устраняет необходимость в маленькой таблице с 6-7 строками, которая будет содержать описания регионов. Хотя теперь, когда я об этом думаю, было бы медленно подключаться к этой таблице, если первоначально для получения описания региона вам нужно было бы только пройти через очень маленькие строки.

Вариант C был бы идеальным, если бы столбцы описания замедляли работу mysql и если бы небольшая таблица, такая как описания регионов, не имела бы значения.

Возможно, ни один из этих вариантов не является лучшим, не стесняйтесь предложить другой вариант. Спасибо.

P.S. Какой тип столбца будет лучше всего использовать для хранения данных, которые обычно составляют 1-2 абзаца, но иногда могут быть немного больше?

Ответы [ 3 ]

0 голосов
/ 20 января 2011

Для первой части вашего вопроса: если у вас есть тег с id, именем и описанием, вы должны сохранить его в 1 таблице.

Теперь этот запрос

 SELECT name FROM tags WHERE id = 1;

НЕ будет замедляться, если у вас есть 1, 2 или 20 дополнительных полей.

0 голосов
/ 20 января 2011

Я не думаю, что это действительно имеет значение, если вы не обрабатываете тысячи запросов в минуту.Если у вас будет миллион запросов в минуту, я бы реализовал различные параметры и провел тесты для всех этих параметров.По результатам можно принять решение.

0 голосов
/ 20 января 2011

По моему (по общему мнению, несколько неосведомленному), это действительно зависит от того, насколько вы будете использовать их оба.

При правильной индексации этот JOIN не должен быть очень дорогим.Кроме того, больший стол будет медленнее.Он запрещает кеширование и требует больше времени для доступа к материалам, хотя индексирование серьезно смягчает эту проблему.

Если вы будете объединять имена тегов с идентификаторами тегов LOT и редко будете использовать описания, яскажем иди с отдельными таблицами.Если вы будете использовать описания чаще, используйте одну таблицу.

...