2013-06-18 37 views
0

我有一個預先存在的表格,其中包含各種客戶信息。目前它還有「城市」以及列在3列中的「地區」和「國家」作爲字符串。冗餘信息!MySQL從現有表格的現有列創建數據透視表

我想創建三個新表格,一個用於城市,一個用於地區,另一個用於州,包含每個城市的單個條目等,然後將該ID引回到現有的客戶表與location_id。

我會如何去將城市名稱導出到城市表格中,並將不同的地區導出到地區表格中,然後讓城市引用region_id和state_id表格以便將信息全部分組!

Amatuer問題肯定,但我感謝任何幫助!

+0

這很容易通過一些基本的SQL查詢來實現。你是否試圖開始這項工作,並遇到特定的問題? –

+0

另外,在這種情況下,我可能會質疑這種標準化水平的需要。如果你只是將你的城市視爲你的應用中的一個獨特對象,並且該地區和州只是這個對象的屬性,那麼我只會將城市拉出到自己的表中,並將州和地區作爲字段。如果你當然會將狀態和區域當作第一類對象實體(即區域和狀態將具有不同的屬性),然後將它們歸一化。 –

+0

嘿謝謝你。是的,我今天只是...可怕的腦死亡這是可怕的事情。我需要區域層面的標準化,因爲這裏也會包含不同的信息。我對國家層面的預測是一樣的,所以我認爲它比對不起更安全? – Benshack

回答

0

你不想要三張不同的表!你需要一個三列的表格: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; 

我意識到,這是不是「標準範式」。但對於大多數應用程序來說,這很好。例如,如果您要爲要從列表中選擇狀態的應用程序執行此操作,請在狀態中創建索引並且查詢速度會很快。

在某些情況下,您可能需要在州和地區級別使用單獨的表格。如果你在這些級別有很多不同的列,情況就是這樣。尤其是,如果您是修改這些列中的值。當數據是靜態的(城市不會經常改變狀態)時,展平的維度(如這裏所描述的)是最合適的。當您在不同級別更改值時,規範化是最合適的。

+0

我從最初的問題描述中得到了和你一樣的想法 - 標準化在這裏會過度。如果你仔細觀察隨後的評論,看起來好像至少在地區一級有合理的正常化原因。 –

+0

但是,如果我要更改地區信息中包含的定期信息,那麼將該列標準化到自己的表中也是明智的,對嗎? – Benshack

+0

@Decalmo。 。 。是。在這種情況下,更新的需要將提供對這些信息更規範的方法。不過,這個城市和國家不應該分開。 –