多表的设计
来源:互联网 发布:mac os 重装系统 u盘 编辑:程序博客网 时间:2024/05/22 15:56
一、多表设计:
1.范式:为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系数据库中这种规则就称为“范式”,范式是符合某一种设计要求的总结。想要设计一个结构合理的关系型数据库,必须满足一定的范式。
2.范式理论:前面说到,为了建立冗余较小、结构合理的数据库,我们把设计数据库时必须遵循的规则称为范式。而范式理论把关系应满足的规范要求划分成几个级别:
这里要说明的是,范式的等级越高,应满足的约束条件也越严格。同时,规范的每一级别都依赖于它的前一级别,例如一个关系模式满足2NF,则一定满足1NF。接下来,我们就详细介绍一下1NF(第一范式)、2NF(第二范式)、3NF(第三范式)等三个最常用的范式。
(1.)范式理论 - 第一范式(1NF):
要求:每个属性(或列)确保原子性,不可再分,且无重复;确保表不能出现复杂表头
示例:如果有一张表:
这张表在设计时出现了复杂表头的情况,联系方式 列是可以再分的,同时出现了两个相同的 姓名 列,所以它不满足第一范式。应该改成这样:
(2.)范式理论 - 第二范式(2NF):
要求:每一个非主属性不能部分依赖于码,即必须完全依赖于码;确保一张表只描述同一件事情
示例:如果有一张表:
这张表的主码是有两列共同组成的, 学生编号 和 课程编号 两列共同来确定一个学生的一门课的信息。该表虽然满足第一范式,但在设计时出现了部分依赖的情况:
学生姓名 和 学生年龄 等列依赖于主码中一部分,即 学生编号 列
课程名称 和 课程学分 等列依赖于主码中一部分,即 课程编号 列
只有 成绩 列是完全依赖主码的,由 学生编号 和 课程编号 两列共同确定。所以它不满足第二范式。应该改成这样:
(3.)范式理论 - 第三范式(3NF)
要求:属性不能有传递依赖,即属性不能依赖于其它非主属性;确保表中的每一列和主码的关系是直接相关而非间接相关。
示例:如果有一张表:
这张表是满足第二范式的,每一个非主属性列都是完全依赖主码 学号 列的。但每个 班级编号 也唯一确定一个班级名称,即 班级名称 列出现了传递依赖。所以它不满足第三范式。应该改成这样:
总而言之:
一般情况下,数据库的设计满足第三范式即可。即便是第三范式,在一些追求查询性能的数据库中也会遭到“破坏“,加入了适当的冗余字段来提升查询效率(毕竟单表查询比多表联立查询效率要高不少),比如上面的例子中不去拆分学生和班级信息,让经常查询的数据字段存在一张表中便于查询。
- 多表的设计
- 数据库的多表设计
- 数据库表多对多的设计
- 数据库设计---关于角色表的设计
- 数据库库设计:字典表的设计
- 数据库设计(二) 商品信息表的设计
- 多类的设计
- 多态的设计
- 相关表的设计
- 事实表的设计
- mysql表的设计
- 设计有效率的表
- 数据库表的设计
- 权限表的设计。
- hbase表的设计
- 表设计的知识
- Hbase -- 表的设计
- 数据库表的设计
- Windows下TensorBoard使用注意事项
- 八大排序算法总结(Java实现)
- 【SQL优化】MySQL官网中可优化的层次结构
- priority_queue的基本用法
- mfc 修改static 背景色
- 多表的设计
- 单例模式
- 7.函数def
- 从caffemodel中导出参数
- 清晰理解红黑树的演变---红黑的含义
- C#编程入门_ToArray和CopyTo的区别_22
- CVTE 2017年07月29日 笔试 C/C++ 编程交流
- java web项目安全注意事项
- linux的I2C驱动——读写操作