【发布时间】:2020-04-06 20:12:46
【问题描述】:
我有一个包含 1000 条订单记录的表,一个订单可以有 1 个或多个产品,但是,所有数据都在一个表中。 (SQL Fiddle)
相反,订单数据应该在orders 表中,并且该订单中的产品应该在映射表中
我现有的订单表
+-----------------+----------+--------------+
| orders_auto_inc | order_id | product_code |
+-----------------+----------+--------------+
| 1 | 333 | abcd |
| 2 | 334 | same product |
| 3 | 334 | same product |
| 4 | 334 | same product |
| 5 | 337 | hij |
+-----------------+----------+--------------+
我要创建的新映射表
CREATE TABLE orders_prod_map (
orders_auto_inc int(10),
product_code varchar(100)
);
我希望决赛桌看起来像这样
mysql> SELECT * FROM orders;
+-----------------+----------+
| orders_auto_inc | order_id |
+-----------------+----------+
| 1 | 333 |
| 2 | 334 |
| 5 | 337 |
+-----------------+----------+
mysql> SELECT * FROM orders_prod_map;
+-----------------+--------------+
| orders_auto_inc | product_code |
+-----------------+--------------+
| 5 | hij |
| 1 | abcd |
| 2 | same product |
| 2 | same product |
| 2 | same product |
+-----------------+--------------+
我可以编写一个 Python 脚本来做到这一点,但无论如何只能通过 MySQL 查询将数据导入映射表?
【问题讨论】:
-
如果订单编号相同,产品代码是否始终相同?
-
@ysth 不,一个 order_id 可以有 1 个或多个产品代码,就像 1 个客户订购了多个产品
-
你真的应该有一个数量字段,这样你就没有重复的行,例如
2 | same product。此外,执行此操作后,您的orders表中也不再需要product_code。 -
@Nick 是的,我不需要您的
orders中的product_code。编辑了我的问题。
标签: mysql normalization