2010-04-21 30 views
3

我是關係數據庫的新手,我讀過的所有材料都涵蓋了主鍵和外鍵,常規表單和連接,但忽略了在創建數據庫後填充數據庫。從CSV文件填充數據庫中的相關表(MySql)的概念過程

如何導入CSV文件以使字段與其相關的表格匹配?

假設你打算建立一個啤酒數據庫,並且每一行都有一個CSV文件作爲記錄。

標題:啤酒,beer_name,國家, 城市,州,beer_category,beer_type, alcohol_content

記錄1:安海斯 - 布希公司,百威, 美國密蘇里州聖路易斯市,淡啤酒, 定期, 5.0%

記錄2:安海斯 - 布希公司,百威淡啤, 美國密蘇里州聖路易斯市,淡啤酒 燈,4.2%

記錄3:米勒釀酒公司, 米勒精簡版,美國,密爾沃基, WI,淡啤酒,光, 4.2%

您可以創建一個 「布魯爾」 表和 「啤酒」 表。導入時如何連接表之間的主鍵?

回答

3

您在創建表時可以定義主鍵和外鍵關係。一旦它們被設置好,你就可以忘記它們,除非數據庫拋出錯誤,如果你試圖做一些違反關係的事情。

例如,如果您嘗試將記錄添加到在父表中沒有值的子(外部)表中,數據庫將會抱怨(如果關係設置正確)。

例如除非您已經將啤酒表中添加了 Anheuser-Busch,否則將記錄1添加到啤酒表中將失敗。

上設置你的表了一個建議:

Brewer 
    id   bigint 
    name  varchar(50) 
    country varchar(50) 
    state  varchar(10) 
    city  varchar(50) 


Beer 
    id   bigint 
    brewerId bigint 
    name  varchar(70) 
    category varchar(50) 
    type  varchar(50) 
    alcohol decimal(3,1) 

Set Brewer.Id as the Primary Key of the Brewer table. 
Set Beer.Id as the Primary Key of the Beer table. 
Then create a foreign key relationship between Brewer.Id = Beer.brewerId 

然後手動添加啤酒生產商(因爲沒有太多的)

Brewer 
    1 Anheuser-Busch   United States Mo St. Louis 
    2 Miller Brewing Company United States WI Milwaukee 

然後擺弄你的CSV文件,以取代所有的啤酒詳細信息與釀酒商各自的ID,並用它來填充您的啤酒表:

Beer 
    1 1 Budweiser Pale lager Regular 5.0 
    2 1 Bud Light Pale lager Light  4.2 
    3 2 Miller Lite Pale lager Regular 4.2 

因此:brewerId將每個啤酒鏈接到啤酒臺中的釀造商。這是外鍵 - 每個啤酒都會自動獲取所有釀酒商的詳細信息,因爲它的brewerId與釀酒商的ID相匹配(並且您在創建表格時設置了該關係)。

  • 啤酒1(百威)屬於布魯爾1(百威)
  • 啤酒2(芽光)屬於布魯爾1(百威)
  • 啤酒3(米勒光)屬於布魯爾2(米勒)

這讓你真的很酷的底部。 Say Miller被另一家公司收購......你所要做的只是改變Brewer餐桌上的細節,而瞧 - 米勒所擁有的所有啤酒現在屬於新釀酒商。您也可以通過布魯爾,州等計算銷售額。

基本的經驗法則是,主鍵和外鍵就像父子關係。孩子存儲父母的ID。這樣每個父母可以有多個孩子。它可以讓整體變得更加複雜,但是這會爲您提供一個很好的解決大多數數據庫解決方案的入門方法。

+0

Michael,感謝您的回覆。我一直在玩弄你的建議。解決方案很簡單,我很驚訝,我以前沒有考慮過它。 – 2010-04-27 06:18:22

+0

嗨,如果您發現我的回答有用,請標記爲已接受。 – 2010-06-29 04:58:25