主键(PrimaryKey)与外键(ForeignKey)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了主键(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.00 001
大大开心果 15.00 001
苦咖啡 2 002
随变 3 002
冰工厂 1 002

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

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

以上是关于主键(PrimaryKey)与外键(ForeignKey)的主要内容,如果未能解决你的问题,请参考以下文章

sql用命令创建主键与外键。

数据库中 主键与外键的区别?

超键(super key)、候选键(candidate key)和主键(primary key) 外键(foreign key)的区别

数据库之主键外键

MySQL的几个概念:主键,外键,索引,唯一索引

如何分清SQL数据库中的主键与外键