通过为某些列分配唯一 ID 规范化 MySQL 数据库,然后将相关信息移动到新的 table
Normalize MySQL Database by assigning unique IDs to certain columns, then move relevant information to new table
我有一个 table,其中包含我的数据库所需的所有相关信息,包括以下列:CompanyName、StoreLocation、StoreNumber、ItemName 和 ItemModel
我想将列 CompanyName
移动到它自己的 Company
Table 中,它将包含一个 CompanyID
和 CompanyName
在它自己的 table,以及将 StoreLocation
和 StoreNumber
列移动到它们自己的 Store
Table。我需要为每个公司和每个商店分配唯一的(自动递增很好)ID,同时维护每个 table 中 ID 的外主键完整性。进行这些更改后,数据库 ERD 应如下所示:
这是 table 中所有数据的预期输出:
最后,这是对所有 table 进行标准化后的预期输出:
执行此操作的最佳方法是什么?如有必要,我可以使用 Python 的 Pandas,但想知道添加此规范化的最佳方法,以避免在一个 table 中重复许多值。
如果我可以提供任何其他信息,请告诉我。
这可以通过 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;
如果原来的 table 可以有来自不同公司的商店的重复位置+商店编号,那么在第三个查询中与 company
的连接是必要的。
我有一个 table,其中包含我的数据库所需的所有相关信息,包括以下列:CompanyName、StoreLocation、StoreNumber、ItemName 和 ItemModel
我想将列 CompanyName
移动到它自己的 Company
Table 中,它将包含一个 CompanyID
和 CompanyName
在它自己的 table,以及将 StoreLocation
和 StoreNumber
列移动到它们自己的 Store
Table。我需要为每个公司和每个商店分配唯一的(自动递增很好)ID,同时维护每个 table 中 ID 的外主键完整性。进行这些更改后,数据库 ERD 应如下所示:
这是 table 中所有数据的预期输出:
最后,这是对所有 table 进行标准化后的预期输出:
执行此操作的最佳方法是什么?如有必要,我可以使用 Python 的 Pandas,但想知道添加此规范化的最佳方法,以避免在一个 table 中重复许多值。
如果我可以提供任何其他信息,请告诉我。
这可以通过 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;
如果原来的 table 可以有来自不同公司的商店的重复位置+商店编号,那么在第三个查询中与 company
的连接是必要的。