这是在MySQL中存储JSON的合理用例吗?
我理解,通常认为在MySQL列中存储JSON是一个“坏主意”,因为它变得难以维护,不容易搜索或查询。然而,我觉得我在应用程序中遇到的场景是在MySQL表中存储JSON数据的合理用例。我确实在寻找一个答案,特别是一个可以指出我可能忽视的任何困难的答案,或者如果有任何好的理由来避免我的计划,如果是的话,另一种方法 手头的应用程序提供资源和库存管理,并支持生成部件,其中可能包含无限多个子部件 我有一个表,其中包含项目的所有元数据,例如名称、sku、零售价格、维度,以及最重要的问题:项目类型。项目可以是零件或部件。对于定义为程序集的项,其内容存储在另一个表中,这是在MySQL中存储JSON的合理用例吗?,mysql,json,database-design,extjs4,inventory-management,Mysql,Json,Database Design,Extjs4,Inventory Management,我理解,通常认为在MySQL列中存储JSON是一个“坏主意”,因为它变得难以维护,不容易搜索或查询。然而,我觉得我在应用程序中遇到的场景是在MySQL表中存储JSON数据的合理用例。我确实在寻找一个答案,特别是一个可以指出我可能忽视的任何困难的答案,或者如果有任何好的理由来避免我的计划,如果是的话,另一种方法 手头的应用程序提供资源和库存管理,并支持生成部件,其中可能包含无限多个子部件 我有一个表,其中包含项目的所有元数据,例如名称、sku、零售价格、维度,以及最重要的问题:项目类型。项目可以是
item\u assembly\u contents
,该表的结构是预期的,使用parent\u id
列将子项链接到父项。正如您所期望的,用户可以随时决定从程序集中添加或删除项,或者以其他方式修改程序集内容或将其完全删除
下面是上表说明的可视化表示,其中填充了数据,这些数据在组成时会创建一个包含另一个程序集的程序集。
使用上述结构,从项目
表中删除的任何项目也将通过InnoDBON DELETE CASCADE
在项目集合内容
表中自动删除
下面是一个JSON格式的非常简单的示例程序集,演示了单个子程序集结构
{
"id":1,
"name":"Fruit Basket",
"type":"assembly",
"contents":[
{
"id":10,
"parent_id":1,
"name":"Apple",
"type":"part",
"quantity":1
},
{
"id":11,
"parent_id":1,
"name":"Orange",
"type":"part",
"quantity":1
},
{
"id":12,
"parent_id":1,
"name":"Bag-o-Grapes",
"type":"assembly",
"quantity":1,
"contents":[
{
"id":100,
"parent_id":12,
"name":"Green Grape",
"quanity":10,
"type":"part"
},
{
"id":101,
"parent_id":12,
"name":"Purple Grape",
"quanity":10,
"type":"part"
}
]
}
]
}
果篮是一个组件,其中包含一个名为“Bag o Grapes”的子组件。这一切都非常有效,直到考虑到订单和装运
例如,包含部件的出站装运。在任何时候,用户都必须能够看到组件的内容,正如它们在装运时定义的那样,这就排除了简单地从项目
和项目(组件)内容
表检索数据的可能性,因为这些表可能在装运创建后已被修改。因此,部件内容必须与装运一起明确保存,以便以后可以查看它们,而不受用户定义的库存(即项目
表)中部件的状态或存在的影响
它将程序集内容与装运内容一起存储,这让我有点困惑,在我看来,将数据存储在JSON中是一个可视的解决方案。了解有关此数据的以下几点至关重要:
我觉得这比直接存储JSON要优雅得多,因为数据更加关系化和数据库友好。检索数据并为客户端生成数据也应该很容易!请提供有关上述结构的任何输入 通常,对于订购系统,我希望 Product -< OrderLine >- Order 产品-
在您的情况下,您可以在产品上添加一个“兔子耳朵”关系来表示其自身。因此,您的
出站装运内容将丢失名称
,类型
到新的产品
。然后,您可以递归地建立要根据需要拾取的项目树。这似乎是一个标准的BOM表问题,并且有很多关于SQL和BOM表模式的好文章。我会避免使用JSON存储,因为它会使依赖于本机SQL的任何报告和详细连接功能变得复杂。对于您的应用程序,您可以在数据访问层中为UI构建JSON
IMHO:在关系数据库中保持数据干净、高度可访问和关系化,在数据访问/低级别业务层重新调整应用程序的用途。如果不存储关系数据,为什么要使用关系数据库管理系统?为什么不把你的JSON文件(就是这样)存储在一个高度优化的文件存储数据库(即你的文件系统)中呢?@eggyal这是一个非常好的观点,也是我觉得我提出的表结构是一个丑陋的解决方案的原因之一。我希望以关系的方式存储这些数据,但是我正在努力以一种允许我这样做的方式来构造表。感谢我在阅读有关该主题的文章时提到材料清单。我同意你的回答,只是不知道如何根据我的需要构建数据库?对这件事有什么想法吗?再次感谢你!我将抽象模式以将顺序视为介于