关系型数据库 范式

本文介绍了关系型数据库的基本概念,强调了范式在数据库设计中的重要性,特别是三大范式:1NF、2NF和3NF。1NF要求表的每一列具有原子性;2NF要求表有主键,且所有非主键属性都完全依赖于主键;3NF则避免非主键属性之间的传递函数依赖,以减少冗余和数据不一致。文章还通过实例解释了违反这些范式可能带来的问题,并指出在实际设计中需要平衡空间和效率。
摘要由CSDN通过智能技术生成

关系型数据库
  • 采用关系模型来组织数据
  • 行和列的形式存储数据
  • 行和列被称为表
  • 一组表组成了数据库
  • Oracle,SQLServer,DB2,Mysql等
范式 (Normal Form)
  • 范式是关系数据库理论的基础
  • 凡是能够通过关系寻找出来的数据,坚决不再重复存储,终极目标是为了减少数据的冗余
  • 范式是一种分层结构的规范。每一层都比上一层更加严格;
  • 若要满足下一层范式,前提是满足上一层范式
  • 范式在数据库的设计中有指导意义,但是不是强制规范
三大范式
  • 目前共有8种范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF
  • 范式只解决空间问题,但是数据库不单要解决空间问题,还要保证效率问题
  • 所以数据库的设计又不能完全按照范式的要求实现
  • 一般情况下,只有前三种范式需要满足,即满足三范式。
第一范式 1NF
  • 表的属性要具备(每一列)原子性
  • 每一列都不可再分割
  • 数据表每行只包含一个实体信息,每一列只能存放实体的一个属性
  • 1NF是关系型数据库的基本要求
  • 所以实际创建关系型数据库时不会出现违背1NF的存在,因为创建不成功

如 :

班级
计算机系3班

应该信息拆分为:

系别班级
计算机3班
第二范式 2NF
  • 表要有主键
  • 即”能区分每个实体的唯一属性列“
  • 如果为”复合主键“,实体的其他属性都必须完全依赖于主键的全部,不能依赖部分
  • 如:
    复合主键(员工编码,岗位) —> (姓名,年龄,基本工资)
    (姓名,年龄)只依赖于(员工编码)
    (基本工资)只依赖于(岗位)
  • 应 拆分为两个表:
    (员工编码(primary key),姓名,年龄)
    (岗位(primary key),工资)

如果违背2NF:

  • 数据冗余,每条记录都含有相同信息
  • 删除异常:删除所有员工信息,岗位信息也会被删除
  • 插入异常:无法新增还未招人的岗位(主键不能为空)
  • 更新异常:调整基本工资,所有行都要同时修改,否则会出现数据不一致性问题

2NF仅解决插入异常问题

第三范式 3NF
  • 非主键属性直接依赖主键
  • 表中非主键属性之间不存在依赖关系
  • 即”不存在非主键属性传递函数依赖于主键“
  • 表中不包含其他表中的非主键属性
  • 如:
    (员工编码(primary key),姓名,年龄,部门编码,部门人数)
    (部门人数)依赖于(部门编码)依赖于(员工编码) —— ”传递函数依赖“
  • 应 拆分为两个表:
    (员工编码(primary key),姓名,年龄)
    (部门编码(primary key),部门人数))

如果违背3NF:

  • 数据冗余
  • 删除异常
  • 更新异常


注意

  • 如您发现本文档中有错误的地方,
  • 或者您发现本文档中引用了他人的资料而未进行说明时,请联系我进行更正。
  • 转载或使用本文档时,请作说明。
  • 非常感谢:)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值