数据库系统概论第六章(关系数据理论)知识点总结(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范式比较复杂,只需要知道概念即可,具体会在下一篇文章中讲述

相关文章
|
2月前
|
人工智能 运维 关系型数据库
云栖大会|AI时代的数据库变革升级与实践:Data+AI驱动企业智能新范式
2025云栖大会“AI时代的数据库变革”专场,阿里云瑶池联合B站、小鹏、NVIDIA等分享Data+AI融合实践,发布PolarDB湖库一体化、ApsaraDB Agent等创新成果,全面展现数据库在多模态、智能体、具身智能等场景的技术演进与落地。
|
5月前
|
存储 JSON 关系型数据库
【干货满满】解密 API 数据解析:从 JSON 到数据库存储的完整流程
本文详解电商API开发中JSON数据解析与数据库存储的全流程,涵盖数据提取、清洗、转换及优化策略,结合Python实战代码与主流数据库方案,助开发者构建高效、可靠的数据处理管道。
|
3月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
3月前
|
人工智能 Java 关系型数据库
使用数据连接池进行数据库操作
使用数据连接池进行数据库操作
120 11
|
4月前
|
存储 数据管理 数据库
数据字典是什么?和数据库、数据仓库有什么关系?
在数据处理中,你是否常困惑于字段含义、指标计算或数据来源?数据字典正是解答这些问题的关键工具,它清晰定义数据的名称、类型、来源、计算方式等,服务于开发者、分析师和数据管理者。本文详解数据字典的定义、组成及其与数据库、数据仓库的关系,助你夯实数据基础。
数据字典是什么?和数据库、数据仓库有什么关系?
|
8月前
|
存储 缓存 数据库
数据库数据删除策略:硬删除vs软删除的最佳实践指南
在项目开发中,“删除”操作常见但方式多样,主要分为硬删除与软删除。硬删除直接从数据库移除数据,操作简单、高效,但不可恢复;适用于临时或敏感数据。软删除通过标记字段保留数据,支持恢复和审计,但增加查询复杂度与数据量;适合需追踪历史或可恢复的场景。两者各有优劣,实际开发中常结合使用以满足不同需求。
695 4
|
5月前
|
数据库
数据库三范式
数据库设计中的三范式(1NF、2NF、3NF)用于规范数据结构,减少冗余。1NF 要求字段不可再分,保证原子性;2NF 消除部分依赖,确保非主键列完全依赖主键;3NF 消除传递依赖,非主键列只能依赖主键。遵循三范式可提升数据库的完整性与效率。
146 1
|
4月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
345 0

热门文章

最新文章