将1个表分解(标准化)为2个表

时间:2014-03-31 09:34:27

标签: sql

我有接近约25000条记录的下表。

Table Namee: tblStdCods
Table Columns: id, Place, STD Code, State

有没有办法将表分解为两个,不会影响存储在其中的数据,

tblStdCodes: id, Place, stadcode, stateId
tblState: stateId, stateName 

Original Table :

id    Place        STDCode   State
1     Ahmednagar    414003   Maharashtra

Resultanat Tables :

table 1: 
id    Place        STDCode   State
1     Ahmednagar    414003   1

table 2:

stateId  stateName
1        Maharashtra

1 个答案:

答案 0 :(得分:2)

您必须创建两个具有所需结构的表,之后您可以简单地从旧表中插入数据,如下所示:

//tblState have the field stateName of type int AUTO_INCREMENT
INSERT INTO tblState (stateName) SELECT State FROM tblStdCods GROUP BY State;  

//Insert records with the pointer to the state table
INSERT INTO tblStdCodes (Id,Place, stadcode, stateId) SELECT Id, Place, STD Code, stateID FROM 
tblStdCods JOIN tblState ON State = stateName 

两个结果表的字段类型将从原始表派生,唯一需要注意的是在stateID表的tblState字段上使用AUTO_INCREMENT,在此数据库将自动为您生成的方式...