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

简介:       在利用三范式设计数据库的时候,以前总以为是先画完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都是为了消除冗余和异常问题;

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

 







  



目录
相关文章
|
10月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
1099 7
|
人工智能 关系型数据库 OLAP
聚光灯已就位!阿里云瑶池数据库邀你征战Cursor首届实战征文大赛
阿里云AnalyticDB携手Cursor中文社区,正式发起首届实战征文大赛!我们诚邀开发者融合Cursor的智能编程能力与AnalyticDB PostgreSQL提供的Supabase服务进行项目开发,让优秀项目被专家看见、被机遇拥抱!
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
651 1
|
SQL 数据建模 关系型数据库
别光知道存数据库了,数据建模才是王道!(入门指南+实战代码)
别光知道存数据库了,数据建模才是王道!(入门指南+实战代码)
3011 4
|
SQL 存储 关系型数据库
第二篇:关系型数据库的核心概念与 SQL 基础
本篇内容深入浅出地讲解了关系型数据库的核心概念与SQL基础,适合有一定计算机基础的学习者。文章涵盖数据库的基本操作(CRUD)、数据类型、表的创建与管理等内容,并通过实例解析SELECT、INSERT、UPDATE、DELETE等语句的用法。此外,还推荐了多种学习资源与实践建议,帮助读者巩固知识。学完后,你将掌握基础数据库操作,为后续高级学习铺平道路。
874 1
|
11月前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
889 0
|
数据库
数据库三范式
数据库设计中的三范式(1NF、2NF、3NF)用于规范数据结构,减少冗余。1NF 要求字段不可再分,保证原子性;2NF 消除部分依赖,确保非主键列完全依赖主键;3NF 消除传递依赖,非主键列只能依赖主键。遵循三范式可提升数据库的完整性与效率。
458 1
|
SQL 安全 关系型数据库
数据库安全管理新范式:DBKEEPER一体化数据库权限管控堡垒机解决方案
在数字化时代,数据库安全至关重要。DBKEEPER提供一站式数据库安全访问与权限管控解决方案,支持多种数据库,具备精细化权限管理、数据脱敏、高危操作拦截、全面审计等功能,助力企业实现智能、安全的数据治理,满足金融、医疗、互联网等行业合规需求。选择DBKEEPER,让数据库安全管理更高效!
数据库安全管理新范式:DBKEEPER一体化数据库权限管控堡垒机解决方案

热门文章

最新文章