我想知道在mysql文本字段中将数组存储为JSON字符串是否是一种好的做法。
我正在创建一个发票,允许用户添加无限数量的产品到发票。当表单提交时,它会删除所有的空白项目等,但我通常会留下2-5个项目取决于。每一项都有sku、价格、名称和描述。
对于这种情况,我的选择是(1)创建一个新的产品表,将每个项目添加为新行,将其与invoice表链接,并在访问数据时调用这两个表。或者(2)将所有产品数据作为单个JSON文本字段存储在invoice表中,这样我就不会创建或访问另一个表。
因为我对MySQL编程相当严格,所以我觉得在MySQL中使用JSON是不受欢迎的。我说的对吗?谁能解释一下这件事?
发布于 2011-08-08 14:01:03
如果您所需要的只是存储-那么这是一个不错的做法。
但是,如果您需要执行任何类型的处理、排序或类似的操作,则需要对其进行规范化。
发布于 2011-08-08 14:07:19
因为其他人已经更直接地回答了您的问题,所以我将采取边缘方法,转而讨论未来的可维护性。
将数量可变的项目(SKU、Price、Name、Description)存储为JSON可能没什么问题,但这将导致大量的数据重复。
相反,按您说的做,为所有产品创建一个表。然后为invoices_have_products创建另一个表。然后,您可以从invoices_have_products中提取发票ID匹配的每一行,然后从products中提取产品ID与您从invoices_have_products中提取的行匹配的每一行。
现在可能有点单调乏味,但当所有数据都放在整齐的表中并且易于查询时,您会高兴得多。想象一下使用JSON在数百万个文本字段上运行报告的噩梦。太可怕了。
回答你的问题的一部分:不,我不认为这是good practice,老实说,它看起来有点像坏实践。
发布于 2011-08-08 14:02:53
我不是MySQL专家,但我认为这取决于您想要实现什么。您是否希望已保存到发票中的产品可供搜索?如果是这样的话,您最好使用关系数据库结构。
如果不需要搜索,可以将数据存储为JSON字符串,或者简单地存储为序列化数组,这样就完全不用使用JSON了。
这真的取决于你的需求。
https://stackoverflow.com/questions/6978263
复制相似问题