数据库设计——三范式概念+实战

简介:       在利用三范式设计数据库的时候,以前总以为是先画完ER图,然后导出关系模式,最后用三范式去检验数据库设计的是否合理,but not!我们在一开始画ER图的时候,就应当和三范式联系起来,将错误消灭在源头。



      在利用三范式设计数据库的时候,以前总以为是先画完ER图,然后导出关系模式,最后用三范式去检验数据库设计的是否合理,but not!我们在一开始画ER图的时候,就应当和三范式联系起来,将错误消灭在源头。为了能最早的检验出错误,我们就要对ER图转换成关系模式的算法和三范式是如何消除冗余,避免冲突有深刻的了解,才能知道如何最早发现错误。


     本文主要以机房收费系统数据库设计中的一些东西为例,结合三范式概念,简述下三范式。


   


    一,1NF

定义:

如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是第一范式。

 

简单来说,第一范式要求属性不可再分,来看一个比较常见的例子:

例如,在机房收费系统中,比如我们会遇到日期时间是该写成一个属性还是分开写呢?这时候我们就要根据第一范式来做出一个判断了,因为第一范式要求属性值不可再分,所以我们应该这样:




二,2NF

 

定义:

如果关系模式R1NF,且每个非主属性完全函数依赖于候选键,那么称R是第二范式。

 

要明白第二范式,首先要明白什么是完全函数依赖?

 

完全函数依赖:

RU)中,如果XY,并且对于X的任何一个子集x,都有x不成立,则称YX完全函数依赖。

如图,(X1X2Y,并且,X1Y不成立,X2Y不成立。

 

 


 

但是,如果在完全函数依赖中,若XY,但Y不完全函数依赖于X,则称YX部分函数依赖。

 

例如,如图,此时,X1成立,则Y部分依赖于X1X2;

 

 


 

 

综上,我们可以得出,要满足第二范式,就要让每一个非主键属性完全依赖于主键。

 

例如,我们在机房收费系统设计数据库的时候,对于学生表可能有过这样的设计,最开始的时候,我们为了查询方便,把学生表和卡表这样做:

 


 

但是当我们再次重构数据库的时候,我们就要根据三范式来判断下了。例如,卡内金额依赖于主键学号和卡号,而卡内金额也依赖于卡号,这里就不满足2NF,我们就要将两张表拆开。

 

 

 

 

三,3NF

 

定义:

R满足1NF,且每个非主属性都不传递依赖R的候选键,则称实体E时第三范式。

 

 

什么是非主属性传递码?

如图所示,为传递函数依赖的示意图:

 



 

例如,

 



 

 

还是上面那张表,我们在这里选的是学号作为主键,则表中有:

学号卡号卡内金额,此时出现了传递依赖。

 

 

分析:

2NF3NF,无论是出现部分依赖还是出现传递依赖,都是要将关系模式进行分解,追究产生错误的根源,感觉还是E-R图没有画好的缘故。

 

 

 

小结:

1NF将属性拆成了原子值;2NF3NF都是为了消除冗余和异常问题;

所以,三范式有两个作用:一是可以衡量一个数据库的好坏;二是可以作为数据库设计的一个基本原则。

 







  



目录
相关文章
|
1月前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
98 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
20天前
|
存储 SQL 数据库
深入浅出后端开发之数据库优化实战
【10月更文挑战第35天】在软件开发的世界里,数据库性能直接关系到应用的响应速度和用户体验。本文将带你了解如何通过合理的索引设计、查询优化以及恰当的数据存储策略来提升数据库性能。我们将一起探索这些技巧背后的原理,并通过实际案例感受优化带来的显著效果。
37 4
|
2月前
|
SQL NoSQL 数据库
Cassandra数据库与Cql实战笔记
Cassandra数据库与Cql实战笔记
20 1
Cassandra数据库与Cql实战笔记
|
2月前
|
缓存 算法 关系型数据库
Mysql(3)—数据库相关概念及工作原理
数据库是一个以某种有组织的方式存储的数据集合。它通常包括一个或多个不同的主题领域或用途的数据表。
67 5
Mysql(3)—数据库相关概念及工作原理
|
28天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
158 1
|
24天前
|
存储 数据库
数据库设计三范式
数据库设计三范式
24 0
|
2月前
|
关系型数据库 MySQL 数据库
MySQL数据库:基础概念、应用与最佳实践
一、引言随着互联网技术的快速发展,数据库管理系统在现代信息系统中扮演着核心角色。在众多数据库管理系统中,MySQL以其开源、稳定、可靠以及跨平台的特性受到了广泛的关注和应用。本文将详细介绍MySQL数据库的基本概念、特性、应用领域以及最佳实践,帮助读者更好地理解和应用MySQL数据库。二、MySQL
124 5
|
2月前
|
SQL 存储 安全
SQL查询数据库:基础概念与操作指南
在数字化时代,数据库已成为信息管理的重要工具之一。作为管理和操作数据库的核心语言,SQL(结构化查询语言)已成为数据管理和查询的关键技能。本文将全面介绍SQL查询数据库的基本概念、语句和操作指南,以帮助初学者快速上手,同时为进阶用户提供有价值的参考。一、数据库与SQL简介数据库是一种存储、管理和检索
47 3
|
29天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
67 0
|
2月前
|
SQL 关系型数据库 MySQL
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作