我有一个包含各种客户信息的预先存在的表。目前它还具有以字符串形式列在 3 列中的“城市”以及“地区”和“州”。冗余信息!
我想创建三个新表,一个用于城市,一个用于区域,一个用于州,它将包含每个城市的单个条目等,然后将 ID 引用回现有的客户表中location_id。
我将如何将不同的城市名称导出到城市表中,将不同的区域导出到区域表中,然后让城市也引用 region_id 和 state_id 表,以便将信息全部分组!
肯定是业余问题,但我感谢任何帮助!
我有一个包含各种客户信息的预先存在的表。目前它还具有以字符串形式列在 3 列中的“城市”以及“地区”和“州”。冗余信息!
我想创建三个新表,一个用于城市,一个用于区域,一个用于州,它将包含每个城市的单个条目等,然后将 ID 引用回现有的客户表中location_id。
我将如何将不同的城市名称导出到城市表中,将不同的区域导出到区域表中,然后让城市也引用 region_id 和 state_id 表,以便将信息全部分组!
肯定是业余问题,但我感谢任何帮助!
你不想要三个不同的表!您想要一个包含三列的表: city
, state
, region
。
原因是它city
本身并不存在。考虑(在美国)伊利诺伊州斯普林菲尔德。和马萨诸塞州斯普林菲尔德。或佛罗里达州迈阿密和俄亥俄州迈阿密。您所拥有的是具有层次结构的数据维度。存储它的正确方法是在最低级别(在您的情况下为城市),并使用“维度”表提供其他信息。
假设您的原始数据是正确的,您可以执行以下操作:
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;
我意识到这不是“标准范式”。但是对于大多数应用程序来说,这很有效。例如,如果您要为要从列表中选择状态的应用程序执行此操作,请在状态上创建索引,查询将很快。
在某些情况下,您可能需要在州和地区级别使用单独的表。如果您在这些级别上有很多不同的列,就会出现这种情况。并且,特别是,如果您正在修改这些列中的值。当数据是静态的(城市不经常改变状态)时,扁平维度(如此处所述)最合适。当您更改不同级别的值时,标准化是最合适的。