数据库设计:关于数据库范式一些理解
2013-09-04 18:02
393 查看
1NF:数据表中的每一列信息都能够确切表述,但凡关系型数据库(mysql/oracle/sysbase/db2/sql server)都自动满足1N
表student1
2NF:每个表的记录是唯一的,通常使用自增长主键实现
3NF:表中不存在冗余数据
表student2
见表student2中红色部分,两条记录中系别和专业的数据有冗余
要改进设计则将系别和专业部分保存在另外一张(比如class),student2使用一个字段(classid)来关联class表
表student2
表class
以上两张表通过表class的id和表student2的classid建立链接,在SQL语句中通过join关联:
select a.*,b.* from student2 a left join class b on a.classid=b.id
并不是所有情况下都需要符合3NF,为了提高效率,允许存在一些冗余数据,见下
分类表:category
分类表:books
按照以上设计,如要统计每个分类下书籍的总数量,则程序需要遍历每个分类且根据分类ID来统计书籍总数,在数据量较大的情况下,可能会影响性能。
可以这样优化,在category表中添加一个字段来保存该分类下所有书籍的总数
分类表:category
分类表:books
如需查询某个分类下的书籍总数,只需要查category表即可,不需要统计books表中的数据
在此情况下,允许出现适当的数据冗余
PS: 本人才疏学浅,写得比较简单,如有不对的地方,请指点迷津。
表student1
id | name | age |
1 | 张三 | 12 |
2 | 李四 | 20 |
3NF:表中不存在冗余数据
表student2
id | name | age | 系别 | 专业 |
1 | 张三 | 12 | 计算机 | 软件工程 |
2 | 李四 | 20 | 计算机 | 软件工程 |
要改进设计则将系别和专业部分保存在另外一张(比如class),student2使用一个字段(classid)来关联class表
表student2
id | name | age | classid |
1 | 张三 | 12 | 1 |
2 | 李四 | 20 | 1 |
id | 系别 | 专业 |
1 | 计算机 | 软件工程 |
2 | 英语系 | 商务英语 |
select a.*,b.* from student2 a left join class b on a.classid=b.id
并不是所有情况下都需要符合3NF,为了提高效率,允许存在一些冗余数据,见下
分类表:category
id | name(分类名称) |
1 | 计算机 |
2 | 英语 |
id | catid | name(书名称) | count(书籍数量) |
1 | 1 | php开发 | 30 |
2 | 1 | java开发 | 32 |
可以这样优化,在category表中添加一个字段来保存该分类下所有书籍的总数
分类表:category
id | name(分类名称) | count(书籍数量) |
1 | 计算机 | 62 |
2 | 英语 | 0 |
id | catid | name(书名称) | count(书籍数量) |
1 | 1 | php开发 | 30 |
2 | 1 | java开发 | 32 |
在此情况下,允许出现适当的数据冗余
PS: 本人才疏学浅,写得比较简单,如有不对的地方,请指点迷津。
相关文章推荐
- 数据库设计:关于范式的理解
- 通俗地理解数据库设计的三个范式
- 数据库中关于范式的理解
- 数据库设计范式的理解
- 通俗地理解数据库设计的三个范式
- 理解数据库设计的三大范式
- 数据库-三大设计范式(概念、三大范式的理解)
- 关于SSH框架设计的一些理解
- 【转】数据库设计三范式理解
- 关于数据库设计的一些概念
- 数据库设计范式的理解
- 今天明白了HashCode的作用,理解了数据库设计的三范式。
- 数据库设计范式的理解(转)
- 我对关系型数据库设计范式的理解
- 数据库设计范式的理解
- 数据库设计中范式的理解
- MySQL之数据库模型设计-1 第一范式、第二范式、第三范式理解
- 关于数据库几种范式的理解
- 关于数据库设计范式
- 数据库设计范式的理解