软件设计师:03 - 数据库系统

一、数据模型的分类

在这里插入图片描述

1.1、概念数据模型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2、结构数据模型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 真题

在这里插入图片描述

二、三级模式

在这里插入图片描述
在这里插入图片描述
概念模式对应的是基本表,概念模式也称为模式
外模式对应的是视图,也称用户模式或者子模式
内模式对应的是数据库里面的存储文件,也称存储模式

真题

在这里插入图片描述
在这里插入图片描述

三、两级映像

在这里插入图片描述

内物外逻

在这里插入图片描述

真题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、关系代数

在这里插入图片描述

并、交、差、笛卡尔积

在这里插入图片描述
在这里插入图片描述

连接(join)

连接是在笛卡尔积的基础上进行连接
自然连接会去重,标记为在这里插入图片描述

在这里插入图片描述

theat连接

在这里插入图片描述

等值连接

在这里插入图片描述

自然连接

在这里插入图片描述
在这里插入图片描述

左外连接

在这里插入图片描述

右外连接

在这里插入图片描述

全外连接

在这里插入图片描述
在这里插入图片描述

除(不考)

除数S是C和D两列,所以被除数R就不用看C和D,然后R中A,B去除重复行就是{a,b},{b,d},{c,k},这三个在R中的C和D和S的C和D分别进行对比,能对应的上就保留,不能对应上就去除,例如{b,d}只能对应{e,f},不能对应{c,d},所以{b,d}就去除掉
在这里插入图片描述

真题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查询效率的时候,先进行一个选择,再进行笛卡尔积
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、SQL语言

关系代数转SQL语言

选择和投影

在这里插入图片描述

笛卡尔积

在这里插入图片描述
在这里插入图片描述

自然连接

在这里插入图片描述
自然连接后,重复列去除,重新排序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
笛卡尔积和自然连接有区别。自然连接要去掉重复列再排序,笛卡尔积不用去除,是全部属性排列
在这里插入图片描述

六、查询语句

在这里插入图片描述

DDL语言(数据定义语言)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

DML(数据操纵语句)

在这里插入图片描述
在这里插入图片描述

DQL数据查询语言

在这里插入图片描述

1、投影查询

在这里插入图片描述

2、选择查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、排序查询

在这里插入图片描述

4、聚合函数

在这里插入图片描述
在这里插入图片描述

5、数据分组

当条件里面有聚合函数的时候不能用where 只能用having
在这里插入图片描述
在这里插入图片描述
where后面不能跟聚合函数,having后面跟聚合函数

6、表的连接查询

在这里插入图片描述

内连接

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

外连接

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7、子查询

一般子查询

在这里插入图片描述
在这里插入图片描述

相关子查询

在这里插入图片描述
在这里插入图片描述

8、查询结果的并、交、差

在这里插入图片描述
在这里插入图片描述

真题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、SQL控制语句

1、授予权限

在这里插入图片描述

grant [权限] on.to 用户 [with grant option]
with grant option   # 允许将权限赋予其他人

在这里插入图片描述

2、收回权限

在这里插入图片描述

3、真题

在这里插入图片描述
在这里插入图片描述

八、视图

对视图进行增删改查实际是对实际表进行增删改查

对视图进行操作不必满足 where 条件,但查出来的数据仍需满足 where 条件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

create view A as
	select * from table_name where dept="计算机系"    # 给视图插入数据且dept不一定为计算机系

insert into A values("jiali","计算机")   	# ok
insert into A values("Laptoy","软件工程")   	# ok

*[with check option]:*对视图进行操作必须满足 where 条件

create view B as
	select * from table_name where dept="计算机系" 
[with check option]    								# 给视图插入数据时dept一定为计算机系,否则报错

insert into B values("Laptoy","计算机")   	# ok
insert into B values("jiali","软件工程")   	# no

在这里插入图片描述

在这里插入图片描述

真题

在这里插入图片描述
在这里插入图片描述

九、索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

真题

在这里插入图片描述

十、关系模式,函数依赖,码,属性闭包计算

1、关系模式

在这里插入图片描述

2、函数依赖

在这里插入图片描述
在这里插入图片描述

非平凡的函数依赖

  • X->Y,学号->姓名,学号决定姓名,但是姓名不包含于学号(Y不包含于X),所以是非平凡的函数依赖
  • X->Y,(学号,课程号)->成绩 ,(学号,课程号)决定成绩,但是成绩不包含于(学号,课程号),所以是一个不平凡依赖

平凡的函数依赖

  • X->Y,(学号,课程号)->学号 ,(学号,课程号)决定学号,学号包含于(学号,课程号),所以是一个平凡依赖

完全函数依赖

  • X->Y,并且X的任何真子集都无法决定Y,那么Y对X完全函数依赖
  • (学号+课程号)->成绩,学号或课程号都无法单独决定成绩,则称为完全函数依赖
  • 如果不是组合函数,那么X->Y一定是完全函数依赖

部分函数依赖

  • X->Y,但X的其一真子集可以决定Y,那么Y对X部分函数依赖
  • (学号+身份证号)->姓名,学号或者身份证号都可以单独确定姓名

传递依赖:

  • X->Y,Y->Z,那么Z对X传递依赖,X->Z可以忽略(冗余),员工->岗位,岗位->工资

在这里插入图片描述

3、码

在这里插入图片描述
简单说就是若候选码中的部分码能决定函数,那么选择该部分码作为候选码
在这里插入图片描述
在这里插入图片描述

4、属性闭包计算( 无法被决定的键一定是候选键)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

额外补充

1.关系数据库系统: 支持关系模型

2.关系:一个关系=一张二维表

关系名=表名

3.元组:表的一行

4.属性:每一列的第一行,如性别

5.域:属性的取值范围,如男女

6.关系模式:对关系的描述

由关系名和其属性集合构成


码=键

7.候选码(候选键):任一候选键的任何真子集都不能唯一标识一个记录(比如在成绩表中(学号,课程号)是一个候选键,单独的学号,课程号都不能决定一条记录)

8.主码(主键):从多个候选码中选择一个作为主键

9.主属性:包含在任何候选码中的属性,如学号

10.非主属性:不包含在所有候选码中的属性,如姓名、成绩

11.外码(外键):比如在选课表中,学号不是主键,但在学生关系中它是主键

12.全码:所有属性都是候选码

13.超码:主属性和非主属性的组合,如(学号,姓名)

真题

在这里插入图片描述
无法被决定的键一定是候选键,比如本题A无法被决定,那么候选键中必定有A
主属性是指候选键包含的属性那就是主属性,例如上面的AC和AB为候选键,那主属性就有ABC
本题A无法推出所有,那么
AB->ABC
AC->ABC

所以ABC都是主属性
在这里插入图片描述
AE无法被其他键决定,所以AE必为候选关键字
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十一、范式

在这里插入图片描述

1、1NF 第一范式(属性原子化)

在这里插入图片描述
强调属性的原子性约束,要求属性具有原子性,不可再分解。存在部分函数依赖
举例:
学生表(学号、姓名、年龄、性别、地址)。因为地址可以细分为国家、省份、城市、市区、街道,那么该模式就没有达到第一范式。
第一范式存在问题:冗余度大、会引起修改操作的不一致性、数据插入异常、数据删除异常。

2、2NF 第二范式(消除部分函数依赖)

在这里插入图片描述
第二范式,强调记录的唯一性约束,数据表必须有一个主键,并且没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。存在传递函数依赖
举例:
版本表(版本编码,版本名称,产品编码,产品名称),其中主键是(版本编码,产品编码),这个场景中,数据库设计并不符合第二范式,因为产品名称只依赖于产品编码。存在部分依赖。所以,为了使其满足第二范式,可以改造成两个表:版本表(版本编码,产品编码)和产品表(产品编码,产品名称)

3、3NF 第三范式(消除传递函数依赖)

在这里插入图片描述
第三范式,强调数据属性冗余性的约束,也就是非主键列必须直接依赖于主键。也就是消除了非主属性对码的传递函数依赖。

举例:

订单表(订单编码,顾客编码,顾客名称),其中主键是(订单编码),这个场景中,顾客编码、顾客名称都完全依赖于主键,因此符合第二范式,但顾客名称依赖于顾客编码,从而间接依赖于主键,所以不能满足第三范式。如果要满足第三范式,需要拆分为两个表:订单表(订单编码,顾客编码)和顾客表(顾客编码,顾客名称)。

说明:3NF的模式肯定满足2NF。产生冗余和异常的两个重要原因是部分依赖和传递依赖。3NF模式中不存在非主属性对码的部分函数依赖和传递函数依赖,性能较好。1NF、2NF一般不适合作为数据库模式,通常需要转换为3NF或者更高级别的范式,这种变换过程称为关系模式规范化处理

4、BCNF范式(消除主属性对候选码的部分和传递依赖)

在这里插入图片描述

属于修正的第三范式,是防止主键的某一列会依赖于主键的其他列。当3NF消除了主属性对码的部分函数依赖和传递函数依赖称为BCNF。

特性:
1、所有主属性对每一个码都是完全函数依赖
2、所有主属性对每一个不包含它的码,也是完全函数依赖
3、没有任何属性完全函数依赖与非码的任何一组属性

举例:

库存表(仓库名,管理员名,商品名,数量),主键为(仓库名,管理员名,商品名),这是满足前面三个范式的,但是仓库名和管理员名之间存在依赖关系,因此删除某一个仓库,会导致管理员也被删除,这样就不满足BCNF。

5、4NF 第四范式

非主属性不应该有多值。如果有多值就违反了第四范式。4NF是限制关系模式的属性间不允许有非平凡且非函数依赖的多值依赖。

举例:

用户联系方式表(用户id,固定电话,移动电话),其中用户id是主键,这个满足了BCNF,但是一个用户有可能会有多个固定电话或者多个移动电话,那么这种设计就不合理,应该改为(用户id,联系方式类型,电话号码)。

说明:如果只考虑函数依赖,关系模式规范化程度最高的范式是BCNF;如果考虑多值依赖则是4NF。

6、5NF 第五范式

第五范式属于最终范式,消除了4NF中的连接依赖,第五范式需要满足以下要求:
1、必须满足第四范式
2、表必须可以分解为较小的表,除非那些表在逻辑上拥有与原始表相同的主键。
一般实际应用中不必考虑第五范式。

6、规范化步骤

在这里插入图片描述

7、判断部分函数依赖技巧

在这里插入图片描述
在这里插入图片描述

8、判断传递函数依赖技巧

在这里插入图片描述
在这里插入图片描述
其实也就是若X->Y,且WY->Z,那么其实这个WY(X)->Z,相同(伪传递率)

在这里插入图片描述

9、真题

在这里插入图片描述
对于上题中第三问解析:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10、关系分解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11、无损连接和保持函数依赖

在这里插入图片描述
在这里插入图片描述

12、真题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十二、数据库设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1、需求分析

在这里插入图片描述

2、E-R图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

真题

在这里插入图片描述
在这里插入图片描述

3、概念设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、逻辑结构设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十三、事务管理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十四、数据库备份与恢复

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十五、封锁

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十六、分布式数据库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十七、杂题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/473076.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Dockerfile打包java项目生成镜像部署到Linux

1、Dockerfile 介绍 如果说容器就是“小板房”,镜像就是“样板间”。那么,要造出这个“样板间”,就必然要有一个“施工图纸”,由它来规定如何建造地基、铺设水电、开窗搭门等动作。这个“施工图纸”就是“Dockerfile”。 比起容…

探秘ChatGPT:智能聊天系统的真实面貌

最近,“ChatGPT”这款聊天机器人在网上广受追捧。 该软件被众多人誉为“时代的里程碑”、“科技领域的新冠军”,上次有如此形容的技术便是互联网。 微软创始人比尔盖茨对ChatGPT的描述是,你可能预想出五年后的形态,但是对于十年…

sqlalchemy和moke生成实体类(一)

前言 如果通过java生成实体类,可以通过mybatis或者mybatis-plus的generator。 而sqlalchemy也可以生成实体类,通过sqlalcodegen或者flask-sqlalcodegen。 使用flask-sqlalcodegen生成实体类 建表 建立学生表,如下。 create table stude…

redis关联和非关联

1.1.2.关联和非关联 传统数据库的表与表之间往往存在关联,例如外键: 而非关系型数据库不存在关联关系,要维护关系要么靠代码中的业务逻辑,要么靠数据之间的耦合: {id: 1,name: "张三",orders: [{id: 1,ite…

基于Spring Boot+Vue的社区医院管理系统

末尾获取源码作者介绍:大家好,我是墨韵,本人4年开发经验,专注定制项目开发 更多项目:CSDN主页YAML墨韵 学如逆水行舟,不进则退。学习如赶路,不能慢一步。 目录 一、项目简介 一、研究背景 二…

BUUCTF-Misc11

[SWPU2019]神奇的二维码1 1.打开附件 2.扫码 提示这里没有flag 3.binwalk 把图片放在kali,用binwalk 发现;里面有好几个压缩包和一张图片 binwalk -e 分离的文件 得到以下内容 4.base64 点开总共有一个加密的图片,和一个加密的音频,还有一…

【算法】差分算法(空调)

可用于求一个数组要变为另一个数组最少要改变多少次的次数 Farmer John 的 N 头奶牛对他们牛棚的室温非常挑剔。 有些奶牛喜欢温度低一些,而有些奶牛则喜欢温度高一些。 Farmer John 的牛棚包含一排 N 个牛栏,编号为 1…N,每个牛栏里有一头…

(一)基于IDEA的JAVA基础3

通过之前的内容,我们在建好的文件夹下建一个java文件,我们来在IDEA中写一下之前用记事本写的helloworld,我们先看一下java代码的规范: 1.java程序文件名一定要有意义,首字母一定要大写。 2.class后面的名字:由大小写字母&#x…

Apipost数据模型上线,解决相似数据结构复用问题

在API设计和开发过程中,存在许多瓶颈,其中一个主要问题是在遇到相似数据结构的API时会产生重复性较多的工作:在每个API中都编写相同的数据,这不仅浪费时间和精力,还容易出错并降低API的可维护性。 为了解决这个问题&a…

【mac M3】idea删除不用或者失效的jdk

【mac M3】idea删除不用或者失效的jdk 不用(重复)或者失效的jdk如下: 重复或者已失效的JDK版本出现在下拉列表中不仅影响美观,也影响效率,删除jdk的步骤如下: 步骤1.点击File 步骤2.选择Project Structure…

运行jpsall脚本时报命令找不到

1、问题记录 2、解决 进入脚本文件排查问题 [rootnode01 ~]# vim /usr/local/bin/jpsall 错误原因:第四行本来是注释,没有加#,所以总是报这个命令没找到,上一次出现这个问题是因为user打错了,所以一定要细心检查 #…

MySQL - 单表访问

单表访问 查询方式 MySQL查询的执行方式大致分为下边两种: 使用全表扫描进行查询 这种执行方式很好理解,就是把表的每一行记录都扫一遍嘛,把符合搜索条件的记录加入到结果集就完了。不管是啥查询都可以使用这种方式执行,当然&am…

基于springboot+vue的交通管理在线服务系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

代码随想录算法训练营Day52 ||leetCode 300.最长递增子序列 || 674. 最长连续递增序列 || 718. 最长重复子数组

300.最长递增子序列 class Solution { public:int lengthOfLIS(vector<int>& nums) {if (nums.size() < 1) return nums.size();vector<int> dp(nums.size(), 1);int result 0;for (int i 1; i < nums.size(); i) {for (int j 0; j < i; j) {if (…

Jmeter的自动化测试实施方案

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 Jmeter是目前最流行的一种测试工具&#xff0c;基于此…

JUnit5的条件测试、嵌套测试、重复测试

条件测试 JUnit5支持条件注解&#xff0c;根据布尔值判断是否执行测试。 自定义条件 EnabledIf和DisabledIf注解用来设置自定义条件&#xff0c;示例&#xff1a; Test EnabledIf("customCondition") void enabled() { // ... } Test DisabledIf("cust…

【干货详解】全网最全白盒测试攻略大全

白盒测试&#xff08;White Box Testing&#xff09;又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试只测试软件产品的内部结构和处理过程&#xff0c;而不测试软件产品的功能&#xff0c;用于纠正软件系统在描述、表示和规格上的错误&#xff0c;是进一步测…

Docker常用命令练习

文章目录 Docker常用命令练习1.docker 基础命令2.镜像命令3.保存镜像4.加载镜像5.容器命令6.环境变量7. --rm8. --networkhost Docker常用命令练习 1.docker 基础命令 安装docker yum install docker启动docker systemctl start docker关闭docker systemctl stop docker重…

外卖项目:用Redis实现缓存店铺营业状态、店铺菜品,优化商品浏览速度(debug一遍)

文章目录 一、设置店铺营业状态二、缓存菜品三、缓存套餐四、执行速度 一、设置店铺营业状态 针对店铺的营业状态&#xff0c;只涉及到一个字段&#xff0c;就没有设计表结构了&#xff0c;所有直接用redis存储来实现该功能。 约定&#xff1a;1表示营业 0表示打烊 先来看原先…

【Redis】Redis常见原理和数据结构

Redis 什么是redis redis是一款基于内存的k-v数据结构的非关系型数据库&#xff0c;读写速度非常快&#xff0c;常用于缓存&#xff0c;消息队列、分布式锁等场景。 redis的数据类型 string&#xff1a;字符串 缓存对象&#xff0c;分布式ID&#xff0c;token&#xff0c;se…