MySQL从现有表中的现有列创建数据透视表

时间:2013-06-18 23:37:38

标签: mysql

我有一个包含各种客户信息的现有表格。目前它还将“城市”以及“地区”和“州”列为3列中的字符串。冗余信息!

我想创建三个新表,一个用于城市,一个用于区域,一个用于州,将包含每个城市的单个条目等,然后将ID引用回现有客户带有location_id的表。

我如何将不同的城市名称导出到cities表中,将不同的区域导出到区域表中,然后让城市引用region_id和state_id表,以便信息全部分组!

Amatuer肯定会有问题,但我感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

你不想要三张不同的牌桌!您想要一个包含三列的表:citystateregion

原因是city本身并不存在。考虑(在美国)伊利诺伊州斯普林菲尔德。和马萨诸塞州斯普林菲尔德或者迈阿密,佛罗里达州和迈阿密,OH。您拥有的是具有层次结构的数据维度。存储它的正确方法是在最低级别(在您的情况下为城市),其中“维度”表提供其他信息。

假设您的原始数据是正确的,您可以执行以下操作:

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;

我意识到这不是“标准的正常形式”。但是对于大多数应用来说,这种方例如,如果要为要从列表中选择状态的应用程序执行此操作,请在状态上创建索引,查询将很快。

在某些情况下,您可能需要在州和地区级别使用单独的表。如果您在这些级别有许多不同的列,就会出现这种情况。特别是,如果您修改这些列中的值。当数据是静态的时(城市不经常改变状态),扁平维度(如此处所述)最合适。当您更改不同级别的值时,规范化是最合适的。