软件设计师之数据库系统万字大总结(莽起来)中

简介: 软件设计师之数据库系统万字大总结(莽起来)中

4.规范化理论


4.1函数依赖


设R(U)是属性U上的一个关系模式,X和Y是U的子集,r是R的任一关系,如果对于r中的任意两个元组u,v,只要由u[Y] = v[Y],则称X函数决定Y,或成Y函数依赖于X,记为X->Y。


微信图片_20211229131924.png


4.2 价值与用途


非规范化的关系模式,可能存在的问题包括:数据冗余、更新异常、插入异常、删除异常。


4.3 键


微信图片_20211229131930.png


超键和候选键的区别:超键可能存在冗余属性,候选键是一定没有冗余属性的。


候选键也是能够唯一标识元组的。


候选键与主键的区别:候选键可以有多个,主键只能有一个


外键:别的关系的主键。


4.4 求候选键


图示法


  • 将关系模式的函数依赖关系用”有向图“的方式表示


  • 找入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中所有结点,则该属性集为关系模式的候选键


  • 若入度为0的属性集不能遍历图中所有结点,则需要尝试性的将一些中间结点(既有入度,也有出度的结点)并入入度为0的属性集中,直至该集合能遍历图中所有结点,集合为候选键


微信图片_20211229132059.png


A1 ABCD B


4.5 范式


微信图片_20211229132105.png


  • 主属性:包含在候选码中的属性,可以起到唯一标识的作用。


非主属性:不包含在任何一个候选码中的属性。


  • 第一范式(1NF):在关系模式R中,当且仅当所有域只包含原子值,即每个分量都是不可再分的数据项,则称R是第一范式。


  • 第二范式(2NF):当且仅当R是1NF,且每一个非主属性完全依赖主键(不存在部分依赖)时,则称R是第二范式


  • 比如说,学号和课程号(两个主键)可以确定成绩和学分,这里面存在着课程号可以确定学分这个以来。
  • 会发生数据冗余,更新异常,插入异常,删除异常。
  • 解决方式:将课程号和学分提取出来作为一个新的关系。


  • 第三范式(3NF):当且仅当R是1NF,且R中没有非主属性传递依赖码时,则称R是第三范式。


  • 单主键是不存在部分依赖的说法
  • 如果存在数据冗余,更新异常,插入异常,删除异常这些问题,还是将存在的问题的直接提取出来形成新的范式


  • BC范式(BCNF):设R是一个关系模式,F是他的依赖集,R属于BCNF当且仅当其F中每个依赖的决定因素必定包含R的某个候选码。


  • 例题


image.png


  • 如图可以看到SJ->T,ST->J。相当于遍历完所有的结点。这样话是满足第2,3范式的,因为没有部分依赖。
  • 但是不满足BC范式,因为T->J,但是T不是候选码。


  • 消除部分依赖,这个必须是在主键是多个属性的组合键这个场景下。


4.6 模式分解


微信图片_20211229132548.png


  • 第一种:经过多种转换,把拆分的表进行多种操作还原称原来的表。


  • 第二种:


微信图片_20211229132554.png


  • 三个算式结果出来后,只要两个中间有一个是有依赖关系就证明是无损的。这种方法只能限制于分解称两个的,三个及三个以上该方法不适用。


5.并发控制


5.1 基本概念


  • 事务:把多个操作封装起来,将多个操作看成一个整体进行操作


  • 原子性、一致性、隔离性、持续性


  • 并发产生的问题:丢失更新、不可重复读问题、“脏”数据的读出


  • 封锁协议:要解决并发产生的问题这就引出了封锁协议。


  • S封锁:共享锁,又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
  • X封锁:排他锁,又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。
  • 一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。可防止丢失修改
  • 二级封锁协议:一级封锁协议加上事务T在读取数据R之前先对其加S锁,读完后即可释放S锁。可防止丢失修改,还可防止读“脏“数据
  • 三级封锁协议:一级封锁协议加上事务T在读取数据R之前先对其加S锁,直到事务结束才释放。可防止丢失修改、防止读”脏“数据与防止数据重复读。
  • 两段锁协议:可串行化的。可能发生死锁。


  • 死锁问题:预防法、死锁的接触法


示例:


微信图片_20211229132858.png

相关文章
|
存储 机器学习/深度学习 安全
软件设计师之数据库系统万字大总结(莽起来)下
软件设计师之数据库系统万字大总结(莽起来)下
软件设计师之数据库系统万字大总结(莽起来)下
|
存储 SQL 安全
软件设计师之数据库系统万字大总结(莽起来)上
软件设计师之数据库系统万字大总结(莽起来)上
软件设计师之数据库系统万字大总结(莽起来)上
|
数据库 分布式数据库
软件设计师-数据库( 分布式)
数据库备份与恢复 数据仓库/分布式系统
1125 0
|
9天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
23 4
|
7天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
20 1
|
1月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
61 3
Mysql(4)—数据库索引
|
16天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
82 1
|
18天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
60 2
|
21天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
81 4
|
3天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
30 0