Py学习  »  DATABASE

通过为某些列分配唯一的id来规范mysql数据库,然后将相关信息移动到新表中

hstan4 • 5 年前 • 1485 次点击  

我有一个表,其中包含数据库所需的所有相关信息,列为:companyname、storelocation、storenumber、itemname和itemmodel

One Table ERD

我想移动这个列 CompanyName 自己 Company 包含 CompanyID 以及 公司名称 在自己的桌子上,以及移动 StoreLocation StoreNumber 列到它们自己 Store 表。我需要为每个公司和每个存储分配唯一的(自动递增很好)id,同时维护每个表中id的外键主键完整性。在进行这些更改之后,数据库erd应该如下所示:

Normalized ERD

以下是一个表中所有数据的预期输出:

One Table Output

最后,这里是所有表都规范化时的预期输出:

Normalized Output

做这个最好的方法是什么?如果需要的话,我可以使用python的熊猫,但我想知道,如果将它保存在一个表中,最好添加这种正常化,以避免重复许多值。

如果我能提供任何额外的信息,请告诉我。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43515
 
1485 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Barmar
Reply   •   1 楼
Barmar    5 年前

这可以用3个SQL查询来完成:

INSERT INTO company (companyname)
SELECT DISTINCT companyname
FROM originalTable;

INSERT INTO store (storelocation, storenumber, companyid)
SELECT DISTINCT o.storelocation, o.storenumber, c.companyid
FROM originalTable o
JOIN company c ON o.companyname = c.companyname;

INSERT INTO item (itemname, itemmodel, storeid)
SELECT o.itemname, o.itemmodel, s.storeid
FROM originalTable o
JOIN store s ON s.storelocation = o.storelocation AND s.storenumber = o.storenumber
JOIN company c ON s.companyid = s.companyid AND o.companyname = c.companyname;

加入 company 在第三查询是必要的,如果原来的表可以重复的位置+存储从不同的公司存储。