南通网站建设计划书,发布网站需要备案吗,知名的wordpress博客,如何做强一个网站的品牌1NF#xff08;第一范式#xff09;
定义#xff1a;确保每一列都是原子值#xff0c;即是不可分割的基础数据项。
所谓第一范式#xff08;1NF#xff09;是指在关系模型中#xff0c;对于添加列的一个规范要求#xff0c;所有的列都 应该是原子性的#xff0c;即数…1NF第一范式
定义确保每一列都是原子值即是不可分割的基础数据项。
所谓第一范式1NF是指在关系模型中对于添加列的一个规范要求所有的列都 应该是原子性的即数据库表的每一列都是不可分割的原子数据项而不能是集合 数组记录等非原子数据项。即实体中的某个属性有多个值时必须拆分为不同的属 性。在符合第一范式1NF表中的每个域值只能是实体的一个属性或一个属性的一 部分。简而言之第一范式就是无重复的域。
比如地址我们可以存为辽宁省大连市甘井子区。那么这样其实就不满足因为我们 把省市区放在一起存储了。我们将地址进行拆分存储即可。省市区。这样满足 第一范式。 2NF第二范式
定义在满足1NF的基础上消除非主键字段对主键字段的部分函数依赖。
部分函数依赖是指在一个关系表中非主属性即非主键字段依赖于主键的一部分而不是整个主键。在第二范式2NF中要求非主属性必须完全依赖于主键这意味着非主属性不能只依赖于主键的一部分。
第二范式需要确保数据库表中的每一列都和主键相关而不能只与主键的某一部分相关主要针对联合主键而言。 部分函数依赖的例子
假设Student表的结构如下
学生编号学生姓名班级编号院系课程编号成绩S01杨明D01思齐C0190S02李婉D01思齐C0187S01杨明D01思齐C0292S03刘海D02述圣C0195S04安然D02述圣C0278S05乐天D03省身C0182
复合主键是指由多个字段组合起来共同作为表的主键这些字段的组合值必须是唯一的用来唯一标识表中的每条记录。
学生编号是作为识别学生的唯一标识我们可以假设它是主键。但是如果我们考虑到成绩是针对每个学生编号和课程编号组合的那么在这个特定场景下学生编号和课程编号一起构成了复合主键因为只有这两个字段的组合才能唯一确定一条记录。 部分函数依赖的情况是指在一个复合主键的情况下非主属性依赖于主键的一部分。例如如果学生姓名、班级编号和院系只依赖于学生编号而不依赖于课程编号那么这些非主属性就对复合主键学生编号课程编号存在部分函数依赖。
为了消除这种部分函数依赖我们可以将表拆分成两个
学生基本信息表只包含学生编号、学生姓名、班级编号和院系
学生编号学生姓名班级编号院系S01杨明D01思齐S02李婉D01思齐S03刘海D02述圣S04安然D02述圣S05乐天D03省身
学生成绩表包含学生编号、课程编号和成绩
学生编号课程编号成绩S01C0190S02C0187S01C0292S03C0195S04C0278S05C0182
这样每个表的非主属性都完全依赖于其主键满足了第二范式2NF。 3NF第三范式
定义在满足2NF的基础上消除非主键字段对主键的传递依赖。
第三范式3NF第三范式需要确保数据表中的每一列数据都和主键直接相关而不能间接相关。 在2NF基础上任何非主属性不依赖于其它非主属性在2NF基础上消除传递依赖
举例说明 上表中所有属性都完全依赖于学号所以满足第二范式但是“班主任性别”和“班主任年龄”直接依赖的是“班主任姓名” 而不是主键“学号”所以需做如下调整 这样以来就满足了第三范式的要求。 不过现在业务上的表设计基本都是反范式的。当然不是说完全不遵守范式而是适当的进行调整。 比如业务上经常需要余字段减少联表查询提升性能特别是业务量比较大的公司这种冗余是很有必要的