寻找使用PHP和MySQL存储表的更好方法

时间:2015-01-22 19:47:12

标签: php mysql join serialization

我是PHP和MySQL的新手,需要帮助解决我面临的问题。我正在尝试创建一个比以下更清洁的表:

表格示例

项目|部分|数量

Item1 | 123 | 2

Item1 | 124 | 2

Item2 | 123 | 1

Item2 | 125 | 3

我可以使用普通表执行此操作,但我可以设想数据库具有大量具有重复数据的重复行。例如,我多次使用Item1来识别每个部分。

我想知道是否有更简洁的方法将这些数据存储在我的数据库中?我将使用PHP将数据存储到MySQL中。我也希望使Item列唯一,但就目前而言,不能这样做。

我查看了序列化,加入以及数组,但我无法弄清楚如何使它完全合适所以我想我会问这里。最终结果将是一份PHP报告:

第1项使用以下部分

第123部分:数量2

第124部分:数量2

第2项使用以下部分

第123部分:数量1

第125部分:数量3

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

您的商品与零件之间存在多对多关系。

所以你需要3个表(item,part和link_item_part)。

您的项目表将ID作为主键。您的零件表也是如此。你的link_item_part表将有两个外键的复合主键构建,一个是项目,另一个是部分。

-- item table
| id | name   |
+----+--------+
|  1 | Item 1 |
|  2 | Item 2 |

-- part table
| id | name |
+----+------+
|  1 |  123 |
|  2 |  124 |
|  3 |  125 |

-- link_item_part
| item_id | part_id | quantity |
+---------+---------+----------+
|       1 |       1 |        2 |
|       1 |       2 |        2 |
|       2 |       1 |        1 |
|       2 |       3 |        3 |

编辑:如果要使用查询操作数据,请不要以数据库本机格式存储数据。如果您以非原生格式存储数据,您将很难操纵它,而且速度很慢。