[未解决]探讨:各位在云用开发数据冗余设计度是怎样的?
2023-4-19 16:36:07
2444
1
1条回帖
如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。不满足第一范式就不是关系型数据库! 举个例子来说,选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系: (学号, 课程名称) → (姓名, 年龄, 成绩, 学分),这个数据库表不满足第二范式,因为存在如下决定关系:(课程名称) → (学分) (学号) → (姓名, 年龄) 即存在组合关键字中的字段决定非关键字的情况。结论:属于1NF 这就造成了数据冗余:同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次解决办法:把选课关系表SelectCourse改为如下三个表: 学生:Student(学号, 姓名, 年龄); 课程:Course(课程名称, 学分); 选课关系:SelectCourse(学号, 课程名称, 成绩)。 这样的数据库表是符合第二范式的,就消除了数据冗余。 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF 表中的属性必须完全依赖于全部主键,而不是部分主键。所以只有一个主键的表如果符合第一范式,那一定是第二范式。 举个例子来说,假定学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),关键字为单一关键字"学号",因为存在如下决定关系:(学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话) 这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:(学号) → (所在学院) → (学院地点, 学院电话) 即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。它也会存在数据冗余的问题。 数据冗余:同一个院校有n个学生,那么院校地点和院校电话就重复存储了n-1次 解决办法:把学生关系表分为如下两个表:学生:(学号, 姓名, 年龄, 所在学院); 学院:(学院, 地点, 电话)。 这样的数据库表是符合第三范式的,消除了数据冗余以及更新插入的异常。 在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。 所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。 举个例子来说,假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:(仓库ID, 存储物品ID) →(管理员ID, 数量) (管理员ID, 存储物品ID) → (仓库ID, 数量)所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:(仓库ID) → (管理员ID) (管理员ID) → (仓库ID) 数据冗余:一个仓库存储n种物品,则仓库与管理员重复存储了n-1次 解决办法:把学生关系表分为如下两个表:学生:(学号, 姓名, 年龄, 所在学院);学院:(学院, 地点, 电话)。 |
+1
0