表数据库名_关系数据库理论:数据库的六大范式知识笔记
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及串口基础知识硬件:断路器、接触器、继电器基础知识
表数据库名_关系数据库理论:数据库的六大范式知识笔记相关推荐
- mysql 进入数据库名_操作mysql数据库的一些命名
一.打开数据库 1.1.打开命令行输入:mysql -u root -p 1.2.root是本地数据库的用户名,然后输入数据库的密码进入. 二.数据库操作 2.1.创建一个数据库:create dat ...
- 关系数据库理论:数据库的六大范式知识笔记
1.数据库范式的作用 数据库范式主要是为解决关系数据库中数据冗余.更新异常.插入异常.删除异常问题而引入的设计理念.简单来说,数据库范式可以避免数据冗余,减少数据库的存储空间,并且减轻维护数据完整性的 ...
- linux查看mysql实例名_查询oracle数据库的数据库名、实例名、ORACLE_SID
查询oracle数据库的数据库名.实例名.ORACLE_SID 连接ORACLE 数据库 SQL> conn risenet/1@//192.168.130.99:1521/risenet 或 ...
- shell+mysql获取数据库名_shell操作mysql数据库
一.安装启动mariadb yum install mariadb mariadb-server mariadb-libs -y systemctl start mariadb #导入数据 mysql ...
- oracle数据库全数据库名,Oracle数据库中的 数据库域名、数据库名、全局数据库名、SID、数据库实例名、服务名 解释...
菜鸟雷区 在配置listener.ora 和 tnsnames.ora 连接Oracle数据库服务器时,我们需要把 以下容易混淆的概念区分开来 数据库域名 数据库名 全局数据库名 SID 数据库实例名 ...
- 查询oracle全局数据库名,Oracle基础:数据库名 实例名 ORACLE_SID 服务名 域名 全局数据库名...
Oracle中存在着这些容易混淆的名称: 数据库名实例名ORACLE_SID服务名域名全局数据库名 在oracle7/8/9i/10g中都有数据库名和实例名,在9i和10g中又引进了三个新的数据库标识 ...
- 【数据库原理】关系数据库理论(一)
数据库规范化理论. 当面对一个现实问题,例如要求设计一个教学管理数据库,如何使用关系模型设计一个合理且合适的关系数据库,如何选择一个比较好的关系模式的集合,每个关系由哪些属性组成,这些属于数据库逻辑设 ...
- oracle语句mysql数据库名称_查询oracle数据库中当前数据库所有表的名称
SQL查询数据库中所有指定类型的字段名称和所在的表名 --查询数据库中所有指定类型的字段名称和所在的表名 --eg: 下面查的是当前数据库中 所有字段类型为 nvarchar(max) 的字段名和表名 ...
- 数据库迁移登录名_如何将数据库的登录名迁移到其他服务器
数据库迁移登录名 Sometimes, it is necessary to move the database from one server to another. The problem is ...
最新文章
- Jquery--遮罩弹窗特效
- VMware虚拟机VMware Authorization Service不能启动问题
- easymodbus_easymodbus4j基于netty的modbus协议快速开发工具
- 分享一个完整的Mybatis分页解决方案
- Linux-Shell脚本编程-学习-4-Shell编程-操作数字-加减乘除计算
- 阿里、Uber都在用的Flink你了解多少?
- bug管理工具之禅道的测试模块的使用
- 掌握这60个Excel小技巧
- 关于更佳学术搜索及Android SDK更新问题
- springboot 过滤器
- coredata理解
- 三极管工作原理图解,快速了解三极管结构和工作原理
- 音频知识点(5)- VAD/CNG/DTX
- 智慧职教云答案在哪里找_智慧职教云课堂上的题答案在哪里能找到?
- Android PAD扫描枪扫描二维码条形码
- mobl:针对移动Web开发的DSL
- 计算机网络的软件有那些,电脑上有哪些好用又常用的软件?
- IDEA热部署不生效解决方案
- 格基规约算法:算法详解
- CAT调用链系统设计
热门文章
- 使用fastjson 获取json字符串中的数组,再转化为java集合对象
- springboot_通过Actuator了解应用程序运行时的内部状况
- JavaSelenium处理页面Table以及Table中随机位置的数据
- 3682: Phorni 后缀平衡树 线段树
- 回顾Spirng ioc 控制反转
- jquery节点查询
- 1001. A+B Format
- Flex 给PopUpButton 设置皮肤
- GitHub标星6000+!Python带你实践机器学习圣经PRML
- 百度-北大在Kaggle发起自动驾驶环境下的汽车6-DOF预测挑战赛