1、数据库范式的作用

数据库范式主要是为解决关系数据库中数据冗余、更新异常、插入异常、删除异常问题而引入的设计理念。简单来说,数据库范式可以避免数据冗余,减少数据库的存储空间,并且减轻维护数据完整性的成本。是关系数据库核心的技术之一,也是从事数据库开发人员必备知识。

2、数据库范式分类介绍

范式是评价数据库模式规范化程度从低到高主要有:1NF、2NF、3Nf、BCNF、4NF、5NF。

2.1 1NF 第一范式

强调属性的原子性约束,要求属性具有原子性,不可再分解。

举例:

学生表(学号、姓名、年龄、性别、地址)。地址可以细分为国家、省份、城市、市区、街道,那么该模式就没有达到第一范式。

第一范式存在问题:冗余度大、会引起修改操作的不一致性、数据插入异常、数据删除异常。

2.2 2NF 第二范式

第二范式,强调记录的唯一性约束,数据表必须有一个主键,并且没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。

举例:

版本表(版本编码,版本名称,产品编码,产品名称),其中主键是(版本编码,产品编码),这个场景中,数据库设计并不符合第二范式,因为产品名称只依赖于产品编码。存在部分依赖。所以,为了使其满足第二范式,可以改造成两个表:版本表(版本编码,产品编码)和产品表(产品编码,产品名称)

2.3 3NF 第三范式

第三范式,强调数据属性冗余性的约束,也就是非主键列必须直接依赖于主键。也就是消除了非主属性对码的传递函数依赖。

举例:

订单表(订单编码,顾客编码,顾客名称),其中主键是(订单编码),这个场景中,顾客编码、顾客名称都完全依赖于主键,因此符合第二范式,但顾客名称依赖于顾客编码,从而间接依赖于主键,所以不能满足第三范式。如果要满足第三范式,需要拆分为两个表:订单表(订单编码,顾客编码)和顾客表(顾客编码,顾客名称)。

说明:3NF的模式肯定满足2NF。产生冗余和异常的两个重要原因是部分依赖和传递依赖。3NF模式中不存在非主属性对码的部分函数依赖和传递函数依赖,性能较好。1NF、2NF一般不适合作为数据库模式,通常需要转换为3NF或者更高级别的范式,这种变换过程称为关系模式规范化处理。

2.4 BCNF(Bovce Codd Normal Form 巴克斯范式)

属于修正的第三范式,是防止主键的某一列会依赖于主键的其他列。当3NF消除了主属性对码的部分函数依赖和传递函数依赖称为BCNF。

特性:

1、所有主属性对每一个码都是完全函数依赖

2、所有主属性对每一个不包含它的码,也是完全函数依赖

3、没有任何属性完全函数依赖与非码的任何一组属性

举例:库存表(仓库名,管理员名,商品名,数量),主键为(仓库名,管理员名,商品名),这是满足前面三个范式的,但是仓库名和管理员名之间存在依赖关系,因此删除某一个仓库,会导致管理员也被删除,这样就不满足BCNF。

2.5 4NF 第四范式 

非主属性不应该有多值。如果有多值就违反了第四范式。4NF是限制关系模式的属性间不允许有非平凡且非函数依赖的多值依赖。

举例:用户联系方式表(用户id,固定电话,移动电话),其中用户id是主键,这个满足了BCNF,但是一个用户有可能会有多个固定电话或者多个移动电话,那么这种设计就不合理,应该改为(用户id,联系方式类型,电话号码)。

说明:如果只考虑函数依赖,关系模式规范化程度最高的范式是BCNF;如果考虑多值依赖则是4NF。

2.6 5NF 第五范式

第五范式属于最终范式,消除了4NF中的连接依赖,第五范式需要满足以下要求:

1、必须满足第四范式

2、表必须可以分解为较小的表,除非那些表在逻辑上拥有与原始表相同的主键。

一般实际应用中不必考虑第五范式。

IT技术分享社区

个人博客网站:https://programmerblog.xyz

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识

表数据库名_关系数据库理论:数据库的六大范式知识笔记相关推荐

  1. mysql 进入数据库名_操作mysql数据库的一些命名

    一.打开数据库 1.1.打开命令行输入:mysql -u root -p 1.2.root是本地数据库的用户名,然后输入数据库的密码进入. 二.数据库操作 2.1.创建一个数据库:create dat ...

  2. 关系数据库理论:数据库的六大范式知识笔记

    1.数据库范式的作用 数据库范式主要是为解决关系数据库中数据冗余.更新异常.插入异常.删除异常问题而引入的设计理念.简单来说,数据库范式可以避免数据冗余,减少数据库的存储空间,并且减轻维护数据完整性的 ...

  3. linux查看mysql实例名_查询oracle数据库的数据库名、实例名、ORACLE_SID

    查询oracle数据库的数据库名.实例名.ORACLE_SID 连接ORACLE 数据库 SQL> conn risenet/1@//192.168.130.99:1521/risenet 或 ...

  4. shell+mysql获取数据库名_shell操作mysql数据库

    一.安装启动mariadb yum install mariadb mariadb-server mariadb-libs -y systemctl start mariadb #导入数据 mysql ...

  5. oracle数据库全数据库名,Oracle数据库中的 数据库域名、数据库名、全局数据库名、SID、数据库实例名、服务名 解释...

    菜鸟雷区 在配置listener.ora 和 tnsnames.ora 连接Oracle数据库服务器时,我们需要把 以下容易混淆的概念区分开来 数据库域名 数据库名 全局数据库名 SID 数据库实例名 ...

  6. 查询oracle全局数据库名,Oracle基础:数据库名 实例名 ORACLE_SID 服务名 域名 全局数据库名...

    Oracle中存在着这些容易混淆的名称: 数据库名实例名ORACLE_SID服务名域名全局数据库名 在oracle7/8/9i/10g中都有数据库名和实例名,在9i和10g中又引进了三个新的数据库标识 ...

  7. 【数据库原理】关系数据库理论(一)

    数据库规范化理论. 当面对一个现实问题,例如要求设计一个教学管理数据库,如何使用关系模型设计一个合理且合适的关系数据库,如何选择一个比较好的关系模式的集合,每个关系由哪些属性组成,这些属于数据库逻辑设 ...

  8. oracle语句mysql数据库名称_查询oracle数据库中当前数据库所有表的名称

    SQL查询数据库中所有指定类型的字段名称和所在的表名 --查询数据库中所有指定类型的字段名称和所在的表名 --eg: 下面查的是当前数据库中 所有字段类型为 nvarchar(max) 的字段名和表名 ...

  9. 数据库迁移登录名_如何将数据库的登录名迁移到其他服务器

    数据库迁移登录名 Sometimes, it is necessary to move the database from one server to another. The problem is ...

最新文章

  1. Jquery--遮罩弹窗特效
  2. VMware虚拟机VMware Authorization Service不能启动问题
  3. easymodbus_easymodbus4j基于netty的modbus协议快速开发工具
  4. 分享一个完整的Mybatis分页解决方案
  5. Linux-Shell脚本编程-学习-4-Shell编程-操作数字-加减乘除计算
  6. 阿里、Uber都在用的Flink你了解多少?
  7. bug管理工具之禅道的测试模块的使用
  8. 掌握这60个Excel小技巧
  9. 关于更佳学术搜索及Android SDK更新问题
  10. springboot 过滤器
  11. coredata理解
  12. 三极管工作原理图解,快速了解三极管结构和工作原理
  13. 音频知识点(5)- VAD/CNG/DTX
  14. 智慧职教云答案在哪里找_智慧职教云课堂上的题答案在哪里能找到?
  15. Android PAD扫描枪扫描二维码条形码
  16. mobl:针对移动Web开发的DSL
  17. 计算机网络的软件有那些,电脑上有哪些好用又常用的软件?
  18. IDEA热部署不生效解决方案
  19. 格基规约算法:算法详解
  20. CAT调用链系统设计

热门文章

  1. 使用fastjson 获取json字符串中的数组,再转化为java集合对象
  2. springboot_通过Actuator了解应用程序运行时的内部状况
  3. JavaSelenium处理页面Table以及Table中随机位置的数据
  4. 3682: Phorni 后缀平衡树 线段树
  5. 回顾Spirng ioc 控制反转
  6. jquery节点查询
  7. 1001. A+B Format
  8. Flex 给PopUpButton 设置皮肤
  9. GitHub标星6000+!Python带你实践机器学习圣经PRML
  10. 百度-北大在Kaggle发起自动驾驶环境下的汽车6-DOF预测挑战赛