PHP / MySQL - 将数组数据存储为JSON,不好的做法?

时间:2011-08-08 05:58:58

标签: php mysql arrays json

我想知道是否将数组作为JSON字符串存储在mysql文本字段中是一种很好的做法。

我正在创建一张发票,允许用户在发票中添加无限数量的产品。提交表单时,它会取出所有空白项目等,但我通常会留下2-5个项目。每个项目都有sku,价格,名称和描述。

我对这种情况的选择是(1)创建一个新的产品表,将每个项目添加为新行,将其与发票表链接,并在访问数据时调用这两个表。或者(2)将所有产品数据作为单个JSON文本字段存储在发票表中,然后我不创建或访问另一个表。

由于我对MySQL编程非常严格,我觉得在MySQL中使用JSON会不受欢迎。我对吗?有人可以对此有所了解吗?

4 个答案:

答案 0 :(得分:14)

如果你只需要存储 - 那么这不是一个坏习惯。

但如果您需要执行任何类型的处理,排序或类似操作,则需要对其进行标准化。

答案 1 :(得分:6)

因为其他人已经更直接地回答了您的问题,我将采用边缘方法并解决未来可维护性

将可变数量的项目(仅作为JSON)存储为数据库实体(SKU,价格,名称,描述)可能会很好,但这会导致大量数据重复。

相反,做你所说的并为所有产品创建一个表。然后为invoices_have_products创建另一个表。然后,您可以从发票ID匹配的invoices_have_products中抽取每一行,然后从products中抽取每一行,其中产品ID与您从invoices_have_products中提取的行匹配。

现在可能会有点乏味,但是当你的所有数据都在整齐的表格中并且易于查询时,你会更开心。想想用JSON在数百万个文本字段上运行报告的噩梦。绝对可怕。

回答你问题的一部分:不,我不认为这是良好做法,说实话,这看起来有点像不好的做法。

答案 2 :(得分:0)

我不是MySQL专家,但我认为这取决于你想要完成的任务。您是否希望可以搜索已保存到发票中的产品?如果是这样,最好使用关系数据库结构。

如果您不需要搜索,可以将数据存储为JSON字符串,或者只是作为序列化数组存储,并且完全不使用JSON。

真的取决于您的需求。

答案 3 :(得分:0)

如果将其存储在JSON中,您将无法使用SQL查询它。例如,我找不到所有购买超过3件产品A的发票。