Storing arrays in the database Storing arrays in the database database database

Storing arrays in the database


No, it's a terrible practice. Please refrain from inserting CSV, JSON*, serialize() or ANY kind of serialized data in a relational database. Denormalization is almost always a bad idea - don't do it unless you really know what you are doing, or you'll start asking questions like: this, this, this, this, ...

Doing that, you lose or it severely hinders your ability to:

  • Use JOINs.
  • Find or modify a particular element
  • Enforce referential integrity
  • Benefit from index usage
  • And it also wastes space

It may sound pedantic, but seeing people do this is one of my pet peeves - especially in light of the plethora of questions asked on SO that would be avoided if they did the right way.

Here's the right way to do one-to-many and many-to-many relationships in an RDBMS.

*Although some SQL databases have built-in support for JSON, it's often better to restructure your data so that you don't need this


Depends on your usage pattern. If you're going to need to access smaller portions of the array (e.g. for use in a where clause or similar), then it's a bad idea - you lose all the benefits of storing data in a relational database by making the data un-relatable. You'll end up with major overhead extracting that small piece of data over and over and over again.

On the other hand, if you're just using the database as a data store and never need to slice that stored array apart - just insert and retrieve, then there's probably no problem at all, other than maybe waste of space, as a serialized/json'd format tends to be "wordy" and take up more space than the raw data itself does.