2010-04-21 27 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