设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。
一、第一范式(1NF)
所谓第一范式(1NF)是指在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。
二、第二范式(2NF)
在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。例如在员工表中的身份证号码即可实现每个一员工的区分,该身份证号码即为候选键,任何一个候选键都可以被选作主键。在找不到候选键时,可额外增加属性以实现区分,如果在员工关系中,没有对其身份证号进行存储,而姓名可能会在数据库运行的某个时间重复,无法区分出实体时,设计辟如ID等不重复的编号以实现区分,被添加的编号或ID选作主键。(该主键的添加是在ER设计时添加,不是建库时随意添加),第二范式(2NF)要求实体的属性完全依赖于主关键字。
三、第三范式(3NF)
在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性,也就是在满足2NF的基础上,任何非主属性不得传递依赖于主属性。
来源:https://blog.csdn.net/weixin_46329056/article/details/125452643
延伸阅读
什么是jOOQ
jOOQ(Java Object Oriented Querying)是一个用于Java编程语言的数据库查询构建器,它提供了一种类型安全、面向对象的方式来构建和执行SQL查询。jOOQ允许开发人员使用Java代码来构建复杂的数据库查询,而无需直接编写SQL语句。
类型安全的查询构建:jOOQ使用Java API来构建查询,它提供了类型安全的方法和操作符,以避免编写错误的SQL语句。开发人员可以利用Java编译器的类型检查功能,减少在编写查询时的错误。
对象关系映射(ORM):jOOQ提供了对象关系映射(ORM)功能,可以将数据库结果集映射为Java对象。通过定义表和对象之间的映射关系,可以更方便地使用查询结果,并在应用程序中进行对象操作。
支持多种数据库:jOOQ支持多种主流数据库,包括MySQL、Oracle、SQL Server、PostgreSQL等。它提供了数据库特定的功能和语法支持,以满足不同数据库的要求。
复杂查询和表达式:jOOQ支持复杂的查询操作,包括连接(JOIN)、子查询、聚合函数、排序、分页等。它提供了丰富的表达式和函数,以构建灵活和复杂的查询条件。
SQL代码生成:jOOQ提供了SQL代码生成工具,可以根据数据库模式自动生成相关的Java类和代码。这样可以减少手动编写SQL和映射代码的工作量,并提高开发效率。
支持原生SQL:除了查询构建器,jOOQ还支持直接执行原生SQL语句,以满足一些特殊的需求。
文章标题:什么是数据库三大范式,它们是做什么的,发布者:E.Z,转载请注明出处:https://worktile.com/kb/p/53817