Подтвердить что ты не робот

Хранение массивов в базе данных

Мне интересно, действительно ли это хорошая практика хранения массивов в базе данных? Я предпочитаю использовать json_encode, а не serialize, но просто интересно, хорошая ли это идея. Если нет, то я могу внести небольшие изменения и просто взорвать массив с запятой.

4b9b3361

Ответ 1

Нет, это ужасная практика. Пожалуйста, воздержитесь от вставки CSV, JSON *, serialize() или любого рода сериализованных данных в реляционную базу данных. Денормализация почти всегда плохая идея - не делайте этого, если вы действительно не знаете, что делаете, или вы начнете спрашивать такие вопросы, как: this, this, this, this,...

Выполняя это, вы теряете или это серьезно мешает вашей способности:

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

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

Здесь правильный путь для выполнения отношений "один ко многим" и "многие ко многим" в РСУБД.

* Хотя некоторые базы данных SQL имеют встроенную поддержку JSON, часто лучше реструктурировать ваши данные, чтобы вам не понадобилось это

Ответ 2

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

С другой стороны, если вы просто используете базу данных в качестве хранилища данных и никогда не нуждаетесь в том, чтобы срезать этот сохраненный массив отдельно - просто вставляйте и извлекайте, то, вероятно, нет проблем вообще, кроме, может быть, потери пространства, поскольку формат serialized/json'd имеет тенденцию быть "многословным" и занимает больше места, чем само исходные данные.