首页 > 数据库 >数据库逻辑设计之三大范式

数据库逻辑设计之三大范式

时间:2023-07-20 17:26:25浏览次数:25  
标签:范式 范式化 之三 字段 课程 主键 冗余 逻辑设计

一、第一范式

1NF是对属性的原子性,要求属性具有原子性,不可再分解;

表:字段1、 字段2(字段2.1、字段2.2)、字段3 ......

如学生(学号,姓名,性别,出生年月日),如果认为最后一列还可以再分成(出生年,出生月,出生日),它就不是一范式了,否则就是;

二、第二范式

2NF是对记录的唯一性,要求记录有唯一标识,即实体的唯一性,即不存在部分依赖

表:学号、课程号、姓名、学分;

这个表明显说明了两个事务:学生信息, 课程信息;由于非主键字段必须依赖主键,这里学分依赖课程号姓名依赖与学号,所以不符合二范式。

可能会存在问题:

  • 数据冗余:,每条记录都含有相同信息;
  • 删除异常:删除所有学生成绩,就把课程信息全删除了;
  • 插入异常:学生未选课,无法记录进数据库;
  • 更新异常:调整课程学分,所有行都调整。

正确做法:

学生:Student(学号, 姓名);
课程:Course(课程号, 学分);
选课关系:StudentCourse(学号, 课程号, 成绩)。

三、第三范式

如果一个关系属于第二范式,并且在两个(或多个)非主键属性之间不存在函数依赖。(非主键属性之间的函数依赖也称为传递依赖),那么这个关系属于第三范式。

3NF是对字段的冗余性,要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖

表: 学号, 姓名, 年龄, 学院名称, 学院电话

注意:上表属于第二范式,因为主键由单个属性组成(学号)

可能会存在问题:

  • 数据冗余:有重复值;
  • 更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况

正确做法:

学生:(学号, 姓名, 年龄, 所在学院);

学院:(学院,学院名称, 电话)。

四、反范式化

一般说来,数据库只需满足第三范式(3NF)就行了。

没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余,达到以空间换时间的目的

〖例〗:如订单表,“金额”这个字段的存在,表明该表的设计不满足第三范式,因为“金额”可以由“单价”乘以“数量”得到,说明“金额”是冗余字段。但是,增加“金额”这个冗余字段,可以提高查询统计的速度,这就是以空间换时间的作法。

Rose 2002中,规定列有两种类型:数据列计算列。“金额”这样的列被称为“计算列”,而“单价”和“数量”这样的列被称为“数据列”。

五、范式化设计和反范式化设计的优缺点

5.1 范式化

优点:

  • 可以尽量减少数据冗余
  • 数据表更新快体积小
  • 范式化的更新操作比反范式化的更新操作更快
  • 范式化的表通常比反范式化更小

缺定:

  • 查表需要练表查询(导致性能降低
  • 更难进行索引优化

5.2 反范式化

优点:

  • 可以减少表的关联
  • 可以更好的进行索引优化

缺点:

  • 在数据冗余以及数据维护异常
  • 对数据修改需要更多成本

标签:范式,范式化,之三,字段,课程,主键,冗余,逻辑设计
From: https://www.cnblogs.com/xiaobingch/p/17568680.html

相关文章

  • 数仓建模—Inmon范式建模与Kimball维度建模
    数仓建模—Inmon范式建模与Kimball维度建模在数据仓库领域,有两位大师,一位是“数据仓库”之父BillInmon,一位是数据仓库权威专家RalphKimball,两位大师每人都有一本经典著作,Inmon大师著作《数据仓库》及Kimball大师的《数仓工具箱》,两本书也代表了两种不同的数仓建设模式,这......
  • 全域Serverless化,华为云引领下一代云计算新范式
    本文分享自华为云社区《全域Serverless化,华为云引领下一代云计算新范式》,作者:华为云PaaS服务小智。近日,华为开发者大会2023(Cloud)在东莞成功举办,期间“全域Serverless化,引领下一代云计算新范式”专题论坛人气满满。华为云首席产品官方国伟携手业界专家、客户、伙伴,面向广大开发......
  • “范式杯”2023牛客暑期多校训练营1 蒻蒟题解
    A.AlmostCorrect题意:给定一个01串,要求构造一系列排序操作(xi,yi),使得经过这些排序操作后可以使与给定01串等长的所有其他01串完全排好序,而给定的01串无法完全排好序Solution构造题我们考虑到对0和1的位置进行统计,统计得出最左边的1的位置为l,最右边的0的位置为r我们进行三次......
  • 【2023.07.17】牛客&第四范式多校Day1(华中科技大学Round)过题小记
    D-Chocolate(博弈论)12分钟过题。签到。K-Subdivision(图论、搜索)1小时21分过题,签到。如果给定的是一棵树的话,新增的点一定位于连接叶子节点的那条边上、否则就是已有的点。然而这是一张图,所以我们可以使用\(\ttbfs\)将其近似的转化为一棵树:当某个点(非其父节点)被第二次遍历......
  • 《架构整洁之道》学习笔记 Part 2 编程范式
    计算机编程发展至今,一共只有三个编程范式:结构化编程面向对象编程函数式编程编程范式和软件架构的关系结构化编程是各个模块的算法实现基础多态(面向对象编程)是跨越架构边界的手段函数式编程是规范和限制数据存放位置与访问权限的手段软件架构的三大关注重点:功能性、组......
  • 数据库的范式设计
    数据库的范式设计原文链接:(三)MySQL之库表设计篇:一、二、三、四、五范式、BC范式与反范式详解!-掘金(juejin.cn)【一】引言MySQL的库表设计,在很多时候我们都是根据我们自己的个人喜好和习惯创建出来的,在前期的设计中总是会有考虑不到的地方,对于库表结构的划分也并不明确......
  • 【ChatGPT系列】数据库设计范式与最佳实践
    [本文出自天外归云的博客园]数据库范式一共有四个范式,分别是第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和第四范式(4NF)。每个范式都有一些规则和规范,用于确保关系型数据库中的数据具有一定的一致性、完整性和有效性。随着范式级别的提高,规则和规范也越来越严格,要求数据库中的数据更加......
  • 数据库的分类,范式以及ER抽象设计
    数据库的分类小型数据库:access、mysql、oraclesqlserver微软CC++C#中型数据库mysql、oraclesqlserve大型数据库分布式oracleDB2NOSQL列存储redis内存数据库以上都是关系型数据库,2维表的形式存储数据---------------------------------------------------......
  • Java扩展Nginx之三:基础配置项
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览经历了前面两篇的入门和编译源码之后,从本篇起,咱们用理论结合实战的方式进入系统的nginx-clojure学习之旅作为《Java扩展Nginx》系列的第三篇,本文会与大家一起了......
  • Java版人脸跟踪三部曲之三:编码实战
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览作为《Java版人脸跟踪三部曲》系列的终篇,本文会与大家一起写出完整的人脸跟踪应用代码前文《开发设计》中,已经对人脸跟踪的核心技术、应用主流程、异常处理等方......