Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在数据库中存储阵列_Php_Database_Serialization_Json_Denormalized - Fatal编程技术网

Php 在数据库中存储阵列

Php 在数据库中存储阵列,php,database,serialization,json,denormalized,Php,Database,Serialization,Json,Denormalized,我想知道在数据库中存储数组是否是一种好的做法?我倾向于使用json\u encode而不是serialize,但我只是想知道这是否是个好主意。如果没有,那么我可以做一些小的更改,用逗号将数组内爆。不,这是一种糟糕的做法。请避免在关系数据库中插入CSV、JSON*、serialize()或任何类型的序列化数据。反规范化几乎总是一个坏主意——除非你真的知道自己在做什么,否则不要这样做,否则你会开始问 像这样的问题: 这样做,您将失去或严重阻碍您的以下能力: 使用JOINs 查找或修改特定元素 强制

我想知道在数据库中存储数组是否是一种好的做法?我倾向于使用
json\u encode
而不是
serialize
,但我只是想知道这是否是个好主意。如果没有,那么我可以做一些小的更改,用逗号将数组内爆。

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

这样做,您将失去或严重阻碍您的以下能力:

  • 使用
    JOIN
    s
  • 查找或修改特定元素
  • 强制引用完整性
  • 从索引使用中获益
  • 而且它也浪费空间
这听起来可能有点迂腐,但看到人们这样做是我最恼火的事情之一——特别是考虑到有太多的问题被问到,如果他们做得对的话,这些问题是可以避免的

下面是在RDBMS中实现一对多和多对多关系的步骤


*尽管一些SQL数据库内置了对JSON的支持,但根据您的使用模式,通常最好重新构造您的数据,这样您就不需要它了。如果您需要访问数组的较小部分(例如,用于where子句或类似内容),那么这是一个坏主意-由于使数据不可关联,您将失去在关系数据库中存储数据的所有好处。最后,您将一次又一次地提取这一小块数据,这将带来巨大的开销


另一方面,如果您只是将数据库用作数据存储,而不需要将存储的数组分割开来—只需插入和检索,那么除了浪费空间之外,可能根本没有问题,因为序列化/json格式往往“冗长”并且比原始数据本身占用更多的空间。

是否将整个数组存储在一列中?您打算如何运行sql语句来搜索条目?它是一个文件名的小数组,不是多维的或任何东西。它是一个包含要组合的文件的包(css和js,但当然不能组合在一起)。。。目的不是搜索特定的文件。例如,您在index.php上指定文件,它将返回相应的包id。当然,问题是,如果您以不同的顺序指定相同的文件,它将出错。重要的是订单是固定的。你明白我的意思吗?json_encode或serialize都不在数组中,你是指存储字符串吗?是的,它几乎是字符串形式的数组。json格式比序列化格式小,至少就我的数组大小而言。这也是我喜欢json的原因之一。虽然是的,但它只是为了存储。。。并且每页检索一次(甚至可能不是每页,具体取决于软件包),这样就不需要编辑软件包了,其他依赖于某些文件的页面可能最终会出错。你唯一一次真正编辑它,就是在一个文件名中输入一个拼写错误,这样我就能明白为什么这样存储一个数组是没有好处的。@Jeanie如果你真的确定这一点,我应该使用JSON。CSV是不可靠的,
serialize()
很容易被破坏,而且对我来说太冗长了。我目前正在使用json\u编码。。。ajreal编辑我的帖子说CSV,我不知道什么是CSV。@Jeanie逗号分隔值标准化几乎总是个坏主意-除非你真的知道自己在做什么,否则不要这样做!非规范化不应该考虑虚拟的性能提升。首先,您必须始终保持正常状态,并且当且仅当您面临一些性能问题时,您应该关注。。。不是非规范化,而是索引、查询提示和重组、物化视图等。非规范化是追求性能的最后一件事。