当前位置: 首页 > 科技观察

关于数据库理论:数据库六大范式知识笔记

时间:2023-03-16 11:32:40 科技观察

1.数据库范式的作用数据库范式主要是为了解决关系型数据库中的数据冗余、更新异常、插入异常、删除异常等问题而引入的一种设计概念。简单地说,数据库范式可以避免数据冗余,减少数据库的存储空间,降低维护数据完整性的成本。它是关系数据库的核心技术之一,也是数据库开发人员必备的知识。2.数据库范式分类介绍范式是评价数据库模式的规范化程度,主要包括:1NF、2NF、3Nf、BCNF、4NF、5NF。2.11NF第一范式强调属性的原子性约束,要求属性是原子的,不可分解。示例:学生表(学号、姓名、年龄、性别、地址)。地址可以细分为国家、省、市、市区、街道,所以模型没有达到第一范式。第一种范式存在问题:冗余度大,会造成修改操作不一致,数据插入异常,数据删除异常。2.22NF第二范式第二范式强调记录的唯一性约束,数据表必须有主键,不包括在主键中的列必须完全依赖于主键,而不仅仅是主键的一部分。例:版本表(版本号,版本名,产品号,产品名),其中主键为(版本号,产品号),在这种场景下,数据库设计不符合第二范式,因为产品名称仅取决于产品代码。存在部分依赖性。因此,为了使其满足第二范式,可以转化为两个表:版本表(版本代码,产品代码)和产品表(产品代码,产品名称)2.33NF第三范式thirdnormalform,强调数据属性冗余性约束,即非主键列必须直接依赖于主键。也就是说,消除了非主属性对代码的传递函数依赖。示例:订单表(订单代码,客户代码,客户姓名),其中主键为(订单代码),在该场景下,客户代码和客户名称完全依赖于主键,因此符合第二范式,但是客户名依赖于客户的Encoding,从而间接依赖于主键,所以不能满足第三范式。如果要满足第三范式,需要拆分成两张表:订单表(订单代码,客户代码)和客户表(客户代码,客户姓名)。解释:3NF的模式必须满足2NF。冗余和异常的两个重要来源是部分依赖和传递依赖。在3NF模型中,代码没有非关键属性的偏函数依赖和传递函数依赖,性能更好。1NF和2NF一般不适合作为数据库模式,通常需要转换为3NF或更高级别的范式。这个转换过程称为关系模式规范化。2.4BCNF(BovceCoddNormalForm)属于修改后的第三范式,防止主键的一列依赖于主键的其他列。当3NF消除了主属性对代码的部分函数依赖和传递函数依赖时,称为BCNF。特点:1.所有主要属性在功能上完全依赖于每个代码2.所有主要属性在功能上也完全依赖于不包含它的每个代码3.没有属性在功能上完全依赖于不是代码的任何属性集示例:库存表(仓库名,管理员名,商品名,数量),主键为(仓库名,管理员名,商品名),满足前面三个范式,但是仓库名和管理员之间有差距name依赖,所以删除一个仓库会导致管理员被删除,不满足BCNF。2.54NF第四范式非关键属性不应该有多个值。如果它有多个值,则违反第四范式。4NF是一种多值依赖,不允许受限关系模式的属性之间存在非平凡和非功能依赖。例子:用户联系表(用户id,固话,手机),其中userid为主键,满足BCNF,但是一个用户可能有多个固话或者多个手机,那么这个设计是不合理的,应该是更改为(用户ID、联系人类型、电话号码)。说明:如果只考虑函数依赖,关系模式规范化程度最高的范式是BCNF;如果考虑多值依赖,则为4NF。2.65NF第五范式第五范式是最终范式,它消除了4NF中的连接依赖。第五范式需要满足以下要求:1.必须满足第四范式。2.必须将表分解成更小的表,除非这些表在逻辑上与原始表具有相同的主键。一般实际应用中不需要考虑第五范式。