如何在MYSQL行中存储2D数组?

时间:2013-11-30 04:06:00

标签: mysql arrays json

甚至可能无法做到这一点。我有一个包含项目的表。 (item_id,item_name,description,用于反序列化为实际对象的json)

我的第二张表包含了包。 (package_id,package_name,price,description,item_list(2D array)) 2D数组需要将item_id值与数量匹配。

通常,我只是将JSON数组序列化为项目列表点。我担心删除或更改item_id值。我不能使用外键来更改“级联”或“删除”子值。有没有办法在mysql行中存储一种子表?

如果我的问题描述不明确,请告诉我。我想确保其他任何试图找到答案的人都可以追随。如果它有用,我可能会在稍后包含一些图像。

解决方案:不,没有办法在MySQL行中存储2D数组。你必须使用桥表。哦,至少有一个解决方案。始终存在解决方案。

3 个答案:

答案 0 :(得分:2)

您正在寻找的是多对多关系。通常,您创建一个额外的表,在两个表之间创建一个映射。这是一个例子:

Many-to-many relationships examples

答案 1 :(得分:2)

嗯,你总是可以将2D数组存储在数据库的一列中,但它存在问题,即从mysql中检索数据,你必须解析该列,而你的那列将包含多个值。如果表中有多值属性,则必须将其迁移到另一个表以规范化数据库设计。

在您的情况下,您正在查看多对多关系,即包裹可能包含许多物品,并且许多包裹可能会带有物品。要解决多对多关系,您必须引入一个通常称为Bridge表的新表。该桥接表将把项目和包表中的主键作为外键。添加此表的原因是删除冗余,这是规范化提供的众多内容之一。

答案 2 :(得分:0)

通过使用第二维的索引作为键,我能够将2D数组存储为JSON对象。这是一个12 x 4数组的示例:

{“ 0”:“ [0,0,0,0,0,0,0,0,0,0]”,“ 1”:“ [0,0,0,0,0,0, 0,0,0,0]“,” 2“:” [0,0,0,1,0,1,0,1,0,0]“,” 3“:” [0,0,0, 1,1,1,1,1,0,0]“}