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

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

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

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

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

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

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

Вот правильный способ взаимодействия «один ко многим» и «многие ко многим» в РСУБД.

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

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

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