将数组存储在数据库中

我想知道是否将数组存储在数据库中是一个好习惯? 我倾向于使用json_encode而不是serialize ,但只是想知道这是一个好主意。 如果没有,那么我可以做一些小的改变,只是用逗号来打乱数组。

不,这是一个可怕的做法。 请避免在关系数据库中插入CSV,JSON *, serialize()或任何types的序列化数据。 非规范化几乎总是一个坏主意 – 除非你真的知道你在做什么,否则不要这样做,否则你会开始问这样的问题: 这个 , 这个 , 这个 ,…

这样做,你输了或严重妨碍你的能力:

  • 使用JOIN s。
  • 查找或修改一个特定的元素
  • 强化参照完整性
  • 受益于索引使用
  • 而且这也浪费空间

这听起来很迂腐,但看到人们这样做是我的宠儿 – 特别是在SO上提出的问题过多,如果他们做的是正确的方式,将会避免。

这是在RDBMS中执行一对多和多对多关系的正确方法 。

* 虽然有些SQL数据库内置了对JSON的支持,但重构数据通常会更好,所以您不需要

取决于您的使用模式。 如果您需要访问数组的较小部分(例如用于where子句或类似部分),那么这是一个糟糕的主意 – 通过将数据存储在关系数据库中,您将失去将数据存储在关系数据库中的所有好处,听上去很像。 最终你会得到大量的开销,一遍又一遍地提取一小块数据。

另一方面,如果你只是使用数据库作为数据存储,而不需要分开存储的数组 – 只需插入和检索,那么根本就没有任何问题,除了可能浪费空间,作为序列化/ json格式往往是“罗嗦”的,并占用比原始数据本身更多的空间。