- 在现有表中,MySQL从现有列创建 pivot 表

  显示原文与译文双语对照的内容
62 5

我有一个prexisting表包含所有的客户信息。当前它还有"城市"以及 3列列出的"区域"和"状态"。冗余信息 !

我想创建三个新表,一个为城市和一个状态,一个为每个城市,然后引用location_id的现有客户表。

如何将不同的城市名称导出到城市表中,以及区域表中,然后让城市引用region_id和state_id表。

当然,Amatuer问题,但我很感激 !

时间:原作者:0个回答

82 3

你不需要三个不同的桌子 !你需要一个包含三列的表:citystateregion

原因是 city 本身并不存在。考虑到( 在美国) Springfield 。还有 Springfield MA或者迈阿密FL和迈阿密哦哦哦。你所拥有的是具有层次结构的数据的维度。存储这一方法的正确方法是在最低级别( 。你的案例中的城市) 和"维度"表提供其他信息。

假设原始数据正确,你可以执行如下操作:

create table Cities (
 CityId int auto_increment not null primary key,
 City varchar(255),
 State varchar(255),
 Region varchar(255)
);
insert into Cities(City, State, Region)
 select distinct City, State, Region
 from YourTable;

我知道这不是"标准标准窗体"。但对于大多数应用程序,这。如果你对于要从列表中选择状态的应用程序进行这里操作,请创建一个索引,并且查询快速。

在某些情况下,你可能希望在状态和区域级别分别使用单独的表。如果你在这些级别上有很多不同的列,情况会是这样的。并且,特别是,如果你正在修改columns中的值。当数据为 static ( 城市并不经常改变状态) 时,flattened维( 如这里所描述) 最合适。当你更改不同级别中的值时,规范化是最合适的。

原作者:
...