主键(PrimaryKey)与外键(ForeignKey)

主键(Primary)

 

工号姓名部门入职时间
001凤姐员工培训部2010-07-05
002兽兽公关部2010-08-02
003憨憨开发部2009-03-05

 

为了能唯一标识一行数据,我们给每位员工设置了一个编号(工号),让这个 工号来作为这条数据的主键

主键就是数据行的唯一标识。不会重复的列才能当主键。在上表中如果用姓名来作为主键,当然是不行的,因为姓名有可能重复

一个表可以没有主键,但是会非常难以处理,因此没有特殊理由的表都要设定主键。

那么,一般情况下,我们应该选用什么来做主键呢?

主键一般有两种选用策略:业务主键和逻辑主键。

业务主键是使用有业务意义的字段来做主键,比

如 身份证号、银行账号等;

逻辑主键是使用没有任务意义的字段做主键(这是完全给程序看的,业务人员不会看数据)。

因为很难保证业务主键不会重复、不会变化,比如 身份证号重复,另外如果上述表中,凤姐离职了,工号为001的人变成了张三,这样都会导致错误。

因此推荐用逻辑主键。

 

外键(ForeignKey)

商品名价格生产厂家厂家地址厂家电话
大大香瓜子5.00大大食品厂恰恰大街300号010-123456
大大开心果15.00大大食品厂恰恰大街300号010-123456
苦咖啡2伊利食品厂内蒙古伊利路1号400400400
随变3伊利食品厂内蒙古伊利路1号400400400
冰工厂1伊利食品厂内蒙古伊利路1号400400400

上表中记录的是几种商品的基本信息以及生产厂家的信息,这样来记录信息,有一个重大的缺点,即数据重复,如果这个超市有很多很多的同种商品,那么就需要将相同的厂家信息重复很多遍,而且,一旦,厂家地址变了,是不是还需要把所有的厂家地址都改了,很显然这样太痛苦了,如果是要存在数据库里面,这都是要占空间的。

所以我们在设计数据库的时候,注意要把这一张表分成两张表:一张专门来存储厂家信息,如表

编号名称地址电话
001大大食品厂恰恰大街300号010-123456
002伊利食品厂内蒙古伊利路1号400400400

另一张来存储商品的信息,如表

商品名价格厂家编号
大大香瓜子5.00001
大大开心果15.00001
苦咖啡2002
随变3002
冰工厂1002

怎么样,这样的话,是不是更清晰了呢。两个表通过厂家编号互相关联,“厂家编号”在厂家信息表里是作为主键存在的,商品信息表通过”厂家编号“与厂家信息表取得关联,这样的话从商品信息表中的”厂家编号“字段就可以很容易地查找到商品对应的商家信息。如此一来,这些数据在数据库里占用的空间就小了很多,而且,在厂家信息产生变更之后,我们只要更新厂家信息表中对应的字段就可以了,不用再一条一条的为每个商品区改商家的信息了。

上述表中第二个表的”厂家编号“字段是指向第一个表的主键的外键

posted on 2012-09-04 13:26 飘落的灵魂 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/xiebiao/archive/2012/09/04/2670259.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值