在数据库中存储数组

Jea*_*lis 13 php database serialization json denormalized

我想知道将数组存储在数据库中是否真的很好?我倾向于使用json_encode而不是serialize,但只是想知道这是不是一个好主意.如果没有,那么我可以做一些小改动,然后用逗号破坏数组.

Nul*_*ion 47

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

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

  • 使用JOINs.
  • 查找或修改特定元素
  • 加强参照完整性
  • 从索引使用中受益
  • 而且它也浪费空间

这可能听起来很迂腐,但是看到人们这样做是我的一个烦恼 - 特别是考虑到过多的问题,如果他们采取正确的方式就可以避免.

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

*虽然有些SQL数据库内置了对JSON的支持,但通常最好重构数据,这样就不需要了

  • _Denormalization几乎总是一个坏主意 - 除非你真的知道你在做什么,否则不要这样做_完全正确!考虑虚构的性能提升,不应该进行非规范化.首先,你总是必须保持正常的形式,当且仅当你遇到一些性能问题时,你应该看看......不是非规范化,而是像indeces,查询提示和重组,物化视图等.非规范化是最后要做的事情你追求的表现. (5认同)

Mar*_*c B 7

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

另一方面,如果您只是将数据库用作数据存储而且永远不需要将存储的数组分开 - 只需插入和检索,那么除了可能浪费空间之外,可能没有问题,因为序列化/ json'd格式往往是"罗嗦"并占用比原始数据本身更多的空间.