你不想要三張不同的表!你需要一個三列的表格: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;
我意識到,這是不是「標準範式」。但對於大多數應用程序來說,這很好。例如,如果您要爲要從列表中選擇狀態的應用程序執行此操作,請在狀態中創建索引並且查詢速度會很快。
在某些情況下,您可能需要在州和地區級別使用單獨的表格。如果你在這些級別有很多不同的列,情況就是這樣。尤其是,如果您是修改這些列中的值。當數據是靜態的(城市不會經常改變狀態)時,展平的維度(如這裏所描述的)是最合適的。當您在不同級別更改值時,規範化是最合適的。
這很容易通過一些基本的SQL查詢來實現。你是否試圖開始這項工作,並遇到特定的問題? –
另外,在這種情況下,我可能會質疑這種標準化水平的需要。如果你只是將你的城市視爲你的應用中的一個獨特對象,並且該地區和州只是這個對象的屬性,那麼我只會將城市拉出到自己的表中,並將州和地區作爲字段。如果你當然會將狀態和區域當作第一類對象實體(即區域和狀態將具有不同的屬性),然後將它們歸一化。 –
嘿謝謝你。是的,我今天只是...可怕的腦死亡這是可怕的事情。我需要區域層面的標準化,因爲這裏也會包含不同的信息。我對國家層面的預測是一樣的,所以我認爲它比對不起更安全? – Benshack