数据库系统概论第六章(关系数据理论)知识点总结(3)—— 范式知识点总结

简介: 假定2014104学生只选修了3号课程这一门课,现在因身体不适,不选修3号课程了,要将课程号删除,但同时,由于课程号是主属性,此操作将导致该整个元组的删除。这样,2014104学生信息都被删除了

一、前言


在讲完了码的概念后,本文将讲述范式有关概念(第一、第二、第三和BC范式)


二、概念


  • 范式是复合某一种级别的关系模式的集合
  • 关系数据库中的关系必须满足一定要求
  • 范式的种类


4ffd2dbafa1340bfa0cbc8e6fa740c0c.png


  • 范式的联系


8c4a6481a8a54e60acf98f7ae36efbc9.png


三、1NF


1.概述


  • 一个关系模式R的所有属性都是不可分的基本数据项
  • 第一范式是关系模式最起码的要求
  • 不满足第一范式的数据库模式不是关系数据模式


2.例题


2fb9a5c4c27840f88e8623d12835cfb4.png


  • S-L-C满足第一范式
  • 主属性:Sno, Cno
  • 非主属性:Grade ,Sdept和Sloc
  • 非主属性 Sdept 和 Sloc 部分函数依赖于码(Sno, Cno)


四、2NF


1.概述


  • 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则 R∈2NF
  • 简洁来说,就是图中的箭头不要从框内指向框外


2.不是2NF带来的问题


1️⃣插入异常


假设Sno=2014102,Sdept=CS,Sloc=N的学生还未选课,那么该学生的信息无法插入SLC

原因:课程号是主属性


95e0565db1ec431aa1f94e21f43797ae.png


2️⃣删除异常


假定2014104学生只选修了3号课程这一门课,现在因身体不适,不选修3号课程了,要将课程号删除,但同时,由于课程号是主属性,此操作将导致该整个元组的删除。这样,2014104学生信息都被删除了


9cdf616d6d5c46c9ac2c8115b304d817.png


3️⃣数据冗余度大


如果一个学生选修了7门课程,那么他的Sdept和Sloc值就要重复存储了7次


5943ac0405714d30bd73dc9f3e8fe0ff.png


4️⃣修改复杂


例如某个学生要转系。在修改此学生元组的Sdept值的同时,还可能需要修改住处(Sloc)。如果这个学生选修了K门课,则必须无遗漏地修改K个元组中全部Sdept、Sloc信息


efe79fd06cc2454aaea6d84f3b7ca6aa.png


3.分解为2NF的方法


e89411219d084843af550ca0b2b7c9b4.png

e0b694dc9ecb4f3fb10f609cf8c22f62.png



4.分解后的好处


  • 由于学生选修课程的情况与学生的基本情况是分开存储在两个关系中的,在S-L关系中可以插入尚未选课的学生


  • 删除一个学生的所有选课记录,只是SC关系中没有关于该学生的记录了,S-L关系中关于该学生的记录不受影响


  • 不论一个学生选多少门课程,他的Sdept和Sloc值都只存储1次。这就大大降低了数据冗余


  • 学生转系只需修改S-L关系中该学生元组的Sdept值和Sloc值,由于 Sdept、Sloc并未重复存储,因此减化了修改操作


5.分解后残留问题


  • 还不能完全消除关系模式中的各种异常情况和数据冗余


  • Sloc传递函数依赖于Sno,即S-L中存在非主属性对码的传递函数依赖


  • S-L关系存在插入异常、删除异常、数据冗余度大、修改复杂


五、3NF


1.概述


关系模式R<U,F> ∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Y ⊉ Z),使得X→Y,Y→Z,Y↛X,成立,则称R<U,F> ∈ 3NF


2.不是3NF带来问题


1️⃣插入异常


如果某个系因种种原因(例如刚刚成立),目前暂时没有在校学生我们就无法把这个系的信息存入数据库


原因:Sno是主码,但是主码不能为空


6a0533f204c549eb9d5c0b087526323d.png


2️⃣删除异常


如果某个系(如CS)的学生全部毕业了,我们在删除该系学生信息的同时,把这个系的信息也丢掉了


原因:Sno是主码,把Sno删除以后,整个信息都会被删除


e4fafcc2c3c34369bcb1b9c2984dff27.png


3️⃣数据冗余度大


每一个系的学生都住在同一个地方,关于系的住处的信息却重复出现,重复次数与该系学生人数相同


0b9dae0275284dd1a96b2cf006bbadcc.png


4️⃣修改复杂


学校调整学生住处时,由于关于每个系的住处信息是重复存储的, 修改时必须同时更新该系所有学生的Sloc属性值


7e2a4c5844d9426e9c061e9344eaf152.png


3.分解为3NF的方法


采用投影分解法,把S-L分解为两个关系模式,以消除传递函数依赖:


  • S-D(Sno, Sdept)


  • D-L(Sdept, Sloc)


  • S-D的码为Sno


  • D-L的码为Sdept

72fb2e404e43417fb8da168ff0399c71.png


4.分解后的好处


  • 在分解后的关系模式中既没有非主属性对码的部分函数依赖,也没有非主属性对码的传递函数依赖,进一步解决了上述四个问题


  • D-L关系中可以插入系的信息,即使还没有在校学生


  • 某个系的学生全部毕业了,只是删除S-D关系中的相应元组,D-L关系中关于该系的信息仍存在


  • 关于系的住处的信息只在D-L关系中存储一次


  • 当学校调整某个系的学生住处时,只需修改D-L关系中一个元组的Sloc属性值。


六、结语


BC范式比较复杂,只需要知道概念即可,具体会在下一篇文章中讲述

相关文章
|
22天前
|
关系型数据库 MySQL 数据库
ORM对mysql数据库中数据进行操作报错解决
ORM对mysql数据库中数据进行操作报错解决
66 2
|
1天前
|
SQL 存储 关系型数据库
添加数据到数据库的SQL语句详解与实践技巧
在数据库管理中,添加数据是一个基本操作,它涉及到向表中插入新的记录
|
21天前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
|
23天前
|
Java 关系型数据库 MySQL
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术的房屋租赁系统,旨在通过自动化和信息化手段提升房屋管理效率,优化租户体验。系统采用JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Layui和Spring Boot 2.0等技术栈,实现了高效的房源管理和便捷的租户服务。通过该系统,房东可以轻松管理房源,租户可以快速找到合适的住所,双方都能享受数字化带来的便利。未来,系统将持续优化升级,提供更多完善的服务。
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
|
4天前
|
SQL 监控 数据处理
SQL数据库数据修改操作详解
数据库是现代信息系统的重要组成部分,其中SQL(StructuredQueryLanguage)是管理和处理数据库的重要工具之一。在日常的业务运营过程中,数据的准确性和及时性对企业来说至关重要,这就需要掌握如何在数据库中正确地进行数据修改操作。本文将详细介绍在SQL数据库中如何修改数据,帮助读者更好
35 4
|
5天前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
阿里云瑶池在2024云栖大会上重磅发布由Data+AI驱动的多模数据管理平台DMS:OneMeta+OneOps,通过统一、开放、多模的元数据服务实现跨环境、跨引擎、跨实例的统一治理,可支持高达40+种数据源,实现自建、他云数据源的无缝对接,助力业务决策效率提升10倍。
|
6天前
|
关系型数据库 MySQL 数据库
使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
【10月更文挑战第1天】使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
24 3
|
5天前
|
测试技术 API 数据库
云数据库之添加数据
云数据库之添加数据
13 1
|
7天前
|
存储 关系型数据库 MySQL
MySQL数据库数据块大小
MySQL数据库数据块大小
22 1
|
19天前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。