我想知道是否将数组作为JSON字符串存储在mysql文本字段中是一种很好的做法。
我正在创建一张发票,允许用户在发票中添加无限数量的产品。提交表单时,它会取出所有空白项目等,但我通常会留下2-5个项目。每个项目都有sku,价格,名称和描述。
我对这种情况的选择是(1)创建一个新的产品表,将每个项目添加为新行,将其与发票表链接,并在访问数据时调用这两个表。或者(2)将所有产品数据作为单个JSON文本字段存储在发票表中,然后我不创建或访问另一个表。
由于我对MySQL编程非常严格,我觉得在MySQL中使用JSON会不受欢迎。我对吗?有人可以对此有所了解吗?
答案 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的发票。