mysql关系范式试题_数据库工程师下午试题4 :关系范式

第一范式(1NF):要具有原子性,不可分割

所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。

第二范式(2NF):每个非主属性都完全依赖于候选键

在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖。

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。

第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键

简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。

第三范式(3NF):每个非主属性都不传递依赖于候选键

在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。

BCNF范式:每个属性都不传递依赖于候选键

消除了非主属性对码的传递依赖。

第四范式(4NF)

不允许有非平凡且非函数依赖的多值依赖

总结和实例描述

第一范式:字段的原子性:简单来说就是每一个字段不能分割出其他的属性

确保每列的原子性

如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式.

例如:顾客表(姓名、编号、地址、……)其中"地址"列还可以细分为国家、省、市、区等。

第二范式:保证主键的唯一性,属性完全依赖于主键

在第一范式的基础上更进一层,目标是确保表中的每列都和主键相关

如果一个关系满足第一范式,并且除了主键以外的其它列,都依赖于该主键,则满足第二范式.

例如:订单表(订单编号、产品编号、定购日期、价格、……),"订单编号"为主键,"产品编号"和主键列没有直接的关系,即"产品编号"列不依赖于主键列,应删除该列。

第三范式:消除传递依赖,保证每个属性都直接依赖于主键

在第二范式的基础上更进一层,目标是确保每列都和主键列直接相关,而不是间接相关

如果一个关系满足第二范式,并且除了主键以外的其它列都不依赖于主键列,则满足第三范式。

为了理解第三范式,需要根据Armstrong公里之一定义传递依赖。假设A、B和C是关系R的三个属性,如果A-〉B且B-〉C,则从这些函数依赖中,可以得出A-〉C, 如上所述,依赖A-〉C是传递依赖。

**码:**数据表中关系的某个属性或者某几个属性的组合,用于区分每个元组。

**候选码:**唯一标识一条记录的最小属性集。

**主码:**某个能够唯一标识一条记录的最小属性集(从候选码挑选的一条)。

**主属性:**候选码属性的并集。

**非主属性:**相对于主属性来说,不包含在候选码中的属性。

超键:在关系中能唯一标识元组的属性集称为关系模式的超键

候选键:不含有多余属性的超键称为候选键

主键:用户选作元组标识的候选键称为主键

822dabd34d574549dec93ccd2e2dc7f1.png

举例:

c6e4162b00f597beb08e26e5d7159fe6.png 

超键:用定义解释,如下属性集 {学号} {身份证号} {学号,姓名} {学号,身份证号}等等,只要可以确定一条唯一记录的集合即可

候选键:去掉超键多余的属性,{学号} {身份证号}等等,此时集合{学号,身份证号}便不是候选键,因为,其中任何一条记录便可以确定一条唯一的记录(唯一确认一条记录的,如果一个人有身份证,有毕业证,则毕业证是候选键,因为一个人可能有多个毕业证,而一个毕业证对应1个身份证)

主键:用户从候选键中人为定义一个作为这个关系表的候选键,如:{学号},从候选键挑选一个即可

分解为BCNF范式的时候,需要清楚关系模式中有几类属性,不同类的属性分成不同的关系模式,然后加上外键 即可。

不正确的范式会导致: 插入 删除 修改异常、

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值