我想知道将数组存储在数据库中是否真的是一种好习惯?我倾向于使用json_encode
而不是serialize
,但只是想知道这是否是一个好主意。如果没有,那么我可以进行一些小的更改,然后用逗号将数组内爆。
问问题
9408 次
2 回答
49
不,这是一种可怕的做法。请避免在关系数据库中插入 CSV、JSON*serialize()
或任何类型的序列化数据。非规范化几乎总是一个坏主意——除非你真的知道自己在做什么,否则不要这样做,否则你会开始问这样的问题:this , this , this , this , ...
这样做,您会失败,或者会严重阻碍您执行以下操作的能力:
- 使用
JOIN
s。 - 查找或修改特定元素
- 强制参照完整性
- 受益于索引使用
- 而且还浪费空间
这听起来可能很迂腐,但看到人们这样做是我最讨厌的事情之一——尤其是考虑到在 SO 上提出的大量问题,如果他们采取了正确的方法,这些问题将被避免。
这是在 RDBMS 中建立一对多和多对多关系的正确方法。
*尽管某些 SQL 数据库内置了对 JSON 的支持,但通常最好重组数据,这样您就不需要它了
于 2011-09-09T16:40:28.343 回答
7
取决于您的使用模式。如果您需要访问数组的较小部分(例如,用于 where 子句或类似的子句),那么这是一个坏主意 - 您会失去将数据存储在关系数据库中的所有好处相关的。一遍又一遍地提取那一小段数据最终会产生巨大的开销。
另一方面,如果您只是将数据库用作数据存储并且永远不需要将该存储的数组分开 - 只需插入和检索,那么可能根本没有问题,除了可能浪费空间,作为序列化/json 的格式往往“冗长”并且比原始数据本身占用更多的空间。
于 2011-09-09T16:40:38.827 回答