软件设计师---数据库

笔记有错误欢迎直接在评论区进行纠正!我将不再维护软件设计师笔记!

数据库上午题大概是6分+下午题一个大题15分

数据模型的分类

概念数据模型

软件设计师---数据库_第1张图片

软件设计师---数据库_第2张图片

软件设计师---数据库_第3张图片

结构数据模型

软件设计师---数据库_第4张图片

软件设计师---数据库_第5张图片

三级模式结构和两级映射

三级模式结构

软件设计师---数据库_第6张图片

外模式(用户模式或子模式)------视图

概念模式(模式)----基本表

内模式(存储模式)------存储文件

两级映射

软件设计师---数据库_第7张图片

关系模式基本术语

软件设计师---数据库_第8张图片

这个主属性的描述有问题,其实说白了就是所有候选键都是主属性,其他都是非主属性

元组就是表中一行数据,属性就是表中的列表名称

完整性约束

软件设计师---数据库_第9张图片

软件设计师---数据库_第10张图片

我的理解就是实体完整性就是主键不能为空,参照完整性就是一个表的外键它可以为空,但是它必须要在另外一个表中找的到,例如员工的部门号是唯一的,这个部门号可以作为员工的外键,然后还有一张部门表,部门表的id就是员工表中的部门号,而员工表的这个部门号必须要在部门表中找的到对应的值,部门号可以为空,因为刚入职的员工会有没有分配部门的情况,自然没部门号

关系代数运算符

软件设计师---数据库_第11张图片

集合运算符

软件设计师---数据库_第12张图片

集合运算符只有差不熟

关系运算符中的投影和选择

软件设计师---数据库_第13张图片

软件设计师---数据库_第14张图片

投影就是选中指定的列把他们重新合在一起组成新的关系,如上图中的πA,C(R) 其实就是把A列和C列重新拼在一起组成新的关系(π1,3(R)和πA,C(R) 是等价的,只是说这个是用列号来表示的)

选择就是选中符合条件的指定的行然后把它们拼在一起组成新的关系,如上图的

是选择B列中有5的行然后拼在一起组成新的关系,这里要注意如果是要指定某列的值等于哪个数(像上面的这个)那就要单引号引起来,不然的话意思就变了,61=5(S)指的是s关系表中第一列和第五列相等的那就拼装在一起,这里没有第五列,所以上面用61=3(S)结果是2 3 2

投影和选择的符号别搞混淆

软件设计师---数据库_第15张图片

关系运算符中的连接

θ连接

软件设计师---数据库_第16张图片

连接其实就是在两个关系的笛卡尔积中选择符合条件的行,而上面这种连接其实就是用比较运算符来进行比较

软件设计师---数据库_第17张图片

这上面的字母比较是比较26字母先后顺序

等值连接

等值连接就是笛卡尔积中某一列和另外一列相等就符合要求,然后选择出来就行了


自然连接

软件设计师---数据库_第18张图片

软件设计师---数据库_第19张图片

自然连接也是在笛卡尔积的基础上去选择符合条件的行,自然连接是没有选择条件的,不像等值连接,它有条件,然后根据条件去选择,同时自然连接要去重,自然连接的条件是看有哪些公共的属性(其实就是列名一样),像上图明显A和C是两个关系中都有的公共属性,所以就是在笛卡尔积中找R.A=S.A并且R.C=S.C(也就是两个关系职中A和C必须同时相等才是符合要求的,如果有三个公共属性,那么这三个公共属性要求在两个关系中都相同,以此类推),符合这个条件的就找出来

左外连接

软件设计师---数据库_第20张图片

软件设计师---数据库_第21张图片

右外连接

软件设计师---数据库_第22张图片

全外连接

软件设计师---数据库_第23张图片

全外连接是自然连接的结果加左右外连接的结果

逻辑运算符

软件设计师---数据库_第24张图片

这里与和或是用来连接上面选择或者投影的条件的连接词,与就是and,或就是or,或只要两边条件有一方满足就可以了

真题

真题1

软件设计师---数据库_第25张图片

答案:(55)B (56) A

讲解地址:2009年上半年第55、56题_哔哩哔哩_bilibili

真题2

软件设计师---数据库_第26张图片

答案:B (这里要注意如果是公共属性那就需要指名是哪个关系的,例如这题C和D是公共属性,所以要说清楚是R关系的C还是S关系的C,也就是R.C还是S.C,我最开始选了A)

讲解地址:2010年上半年第52题_哔哩哔哩_bilibili

软件设计师---数据库_第27张图片

答案:(54)C (55)B

讲解地址:2016年下半年第54、55题_哔哩哔哩_bilibili

这里我最开始是没动哪里来的1=5和3=6,这里其实自然连接的条件,要求要公共属性相同才可以,自然连接也是建立在笛卡尔积的基本上

软件设计师---数据库_第28张图片

这个题目有点问题,R×S应该是R⋈S(垃圾题目)

真题3

软件设计师---数据库_第29张图片

答案:(51)C (52)A

讲解地址:2012年下半年第51、52题_哔哩哔哩_bilibili

自然连接的做题技巧:首先找两个关系的公共属性,上图的C和D,所以属性就有5个(原来7个减去重复的2个),也就知道了是几元关系或者几个属性,然后在看笛卡尔积中公共属性是否都相同,这里我是不画笛卡尔积的,直接看,其实就是找两个关系的C和D一样的,好比上面的adce和cebc中C和D都一样(也就是我图上红色框画出来的),所以这一行可拼在一起作为新的关系的一个元祖,组成结果就是adcebc(去重)。这只是其中一个不是最终答案,不知道你们看懂没?反正我是懂了!

真题4

软件设计师---数据库_第30张图片

讲解地址:2020年下半年第54、55题_哔哩哔哩_bilibili

完全外连接是自然连接+左外连接新增的+右外连接新增的(如上图的右边一样,完全外连接有6个元组)

软件设计师---数据库_第31张图片

左外连接 右外连接

真题5

软件设计师---数据库_第32张图片

答案:D

讲解地址:2016年下半年第56题_哔哩哔哩_bilibili

这个题目我没搞得太懂,我是理解为R×S的效率是最低的,例如R关系属性值有100,S关系属性值有100个,那么R×S是10000个,然后在这10000个中查询符合条件的那自然效率极低,反而如果范围缩小的去查,那自然效率更高,D选项中在做笛卡尔积运算之前先进行了一次筛选,这样范围就小了,效率就高了

真题6

软件设计师---数据库_第33张图片

软件设计师---数据库_第34张图片

讲解地址:2021年上半年第54、55、56题_哔哩哔哩_bilibili

这个题目一开始我看见是三个关系我就动不了手,其实这三个表应该都是独立的,也就是这里不像前面的题目一样要你把它们这些关系拼接成一个新的关系,而是让你求拼装的哪些条件都是什么?值得一提是自然连接是要求要有公共属性的,所以第二个空在投影的里面必须包含商品号,即必须包含1,所以A是错的,基本上可以看出这样的题目都是用的排除法快速求解(其中汉字一定是要单引号引起来的

软件设计师---数据库_第35张图片

关系代数转SQL语句

投影转SQl语句

软件设计师---数据库_第36张图片

选择转SQl语句

软件设计师---数据库_第37张图片

笛卡尔积转SQl语句

软件设计师---数据库_第38张图片

自然连接转SQl语句

软件设计师---数据库_第39张图片

先把它的关系代数变形为上面等价的笛卡尔积表达式,然后在转SQL

真题

真题1

软件设计师---数据库_第40张图片

这里的序列号是合并之后的序列号,这个π1,3,6,7是自定义的投影,如果说只是63<6(R⋈S)转成等价的式子那就是π1,2,3,4,5,8,9(63<6(R⋈S))

总之就是如果给你指定的字母求对应的数字序列的题目那就是求笛卡尔积序列

如果是给你指定的序列要求对应的字母那就是自然连接后的序列

讲解地址:2013年下半年第51、52、53、54题_哔哩哔哩_bilibili

真题2

软件设计师---数据库_第41张图片

答案是CDB

讲解地址:2014年下半年第53、54、55题_哔哩哔哩_bilibili

真题3

软件设计师---数据库_第42张图片

讲解地址:2018年上半年第52、53题_哔哩哔哩_bilibili

真题4

软件设计师---数据库_第43张图片

总结:做这样的题目第一要细心看清楚列号对应的属性,第二看清楚是R×S还是R⋈S,如果是R⋈S的话那就要去重(也就是去掉重复的属性列,一般是去掉后面关系的重复列,例如R(A,B,C,D)和S(A,B,F,G)那自然连接的结果是R.A,R.B,R.C,R.D,S.F,S.G),可以看到S关系的A和B都去掉了,保留的是前面R关系的A和B

SQL语句

SQL语句的分类

软件设计师---数据库_第44张图片

数据定义语句(DDL)

软件设计师---数据库_第45张图片

软件设计师---数据库_第46张图片

修改不是指的修改列的表名,而是指的修改列的类型,一般用上面modify来进行修改

软件设计师---数据库_第47张图片

列的完整性约束

not null 是不能为空

unique 是不能重复(也就是唯一约束)

not null unique 是不能为空并且不能重复

default 是设置默认值

表的完整性约束

软件设计师---数据库_第48张图片

primary key是主键约束(功能和not null unique 一样)

foreign key是外键约束(上面的外键约束语句意思是对sid设置外键约束并且参照S表中的sid)

check 是用户自定义完整性约束(上面语句意思是检查成绩是否在0-100范围内,也就是在表中插入数据的时候成绩这一列会有一个自动检查成绩范围的约束,不在这个范围就会报错)

数据操纵语言(DML)

软件设计师---数据库_第49张图片

软件设计师---数据库_第50张图片

数据查询语言(DQL)

软件设计师---数据库_第51张图片

投影查询

软件设计师---数据库_第52张图片

软件设计师---数据库_第53张图片

软件设计师---数据库_第54张图片

选择查询

软件设计师---数据库_第55张图片

软件设计师---数据库_第56张图片

软件设计师---数据库_第57张图片

排序查询

软件设计师---数据库_第58张图片

软件设计师---数据库_第59张图片

注意上面红色画出来的语句不是说课程号和分数都是降序排列,这里课程号没有指明是什么排序,那就是默认的升序,分数指明了是降序排序,但是这里是多条件排序,所以是先按课程号进行升序排序,如果课程号相同,那就按分数降序排序

聚合函数查询(注意聚合函数只会返回一个结果值)

软件设计师---数据库_第60张图片

软件设计师---数据库_第61张图片

上面这句是验证分数的平均值,也就是AVG集合函数

指的一提的是上面这样写是没问题的,可以进行加减乘除运算(这是我的知识漏洞)

同时要注意count(*)和count(列表名)的区别,区别就是count(*)会把null也算作一个值,会把null这条记录进行统计,而count(列表名)就直接忽视null的记录,不会把这条记录进行统计。

软件设计师---数据库_第62张图片

这是查询课程号的数量并且去重

软件设计师---数据库_第63张图片

数据分组

软件设计师---数据库_第64张图片

分组后

所谓的分组就是把属性值相同的分为一组,例如上面是按课程号分组的,那么课程号中相同的值就会被分作一组,分组主要用于聚合函数查询只能返回一个值,如果想看具体的情况就使用分组

这里要注意having和where的使用区别,区别就是如果拼接的条件里用到了聚合函数,那就只能用having,不能用where!

软件设计师---数据库_第65张图片

软件设计师---数据库_第66张图片

软件设计师---数据库_第67张图片

回炉重造:数据分组_哔哩哔哩_bilibili

内连接

回炉重造:内连接_哔哩哔哩_bilibili

外连接

回炉重造:外连接_哔哩哔哩_bilibili

子查询(先子查询再主查询)

软件设计师---数据库_第68张图片

软件设计师---数据库_第69张图片

软件设计师---数据库_第70张图片

软件设计师---数据库_第71张图片

软件设计师---数据库_第72张图片

真题

真题1

软件设计师---数据库_第73张图片

讲解地址:2010年上半年第53、54、55题_哔哩哔哩_bilibili

真题2

软件设计师---数据库_第74张图片

讲解地址:2012年上半年第55、56题_哔哩哔哩_bilibili

软件设计师---数据库_第75张图片

软件设计师---数据库_第76张图片

这里注意59题的3500是不要单引号引起来的,不要把这里和前面的选择6的条件搞混淆了,这里只有字符串才需要用单引号引起来,数值型是不需要用单引号引起来!

讲解地址:2013年上半年第56、57、58、59题_哔哩哔哩_bilibili

真题3

软件设计师---数据库_第77张图片

软件设计师---数据库_第78张图片

上面红色框出来的是正确答案,注意第56题的C和D选项,D选项是使用了DISTINCT关键字进行去重的,这里特别注意,由于这里使用了聚合函数所以用HAVING其二由于分组了所以去重后每个组的结果数量都只会是1,例如上面D选项的结果就如下图所示,结果每个部门都是1,因为分组是把相同的分作一组,而相同的又会被去重掉,自然结果就是1

软件设计师---数据库_第79张图片

讲解地址:2014年上半年第54、55、56题_哔哩哔哩_bilibili

真题4

软件设计师---数据库_第80张图片

软件设计师---数据库_第81张图片

这里要跟真题3的56题区分开来,具体要不要去重要结合题意进行分析,真题3中员工和部门是一对多,不用去重,而这里项目和供应商是多对多,需要去重,因为同一个项目的同一个供应商提供多种零件,如果这时对项目属性进行统计就会大于1,也就是不去重的话结果是一定大于1的,单实际上只有一个项目

讲解地址:2017年上半年第54、55、56题_哔哩哔哩_bilibili

数据控制语言(DCL)

SQL访问控制

软件设计师---数据库_第82张图片

软件设计师---数据库_第83张图片

软件设计师---数据库_第84张图片

真题

真题1

软件设计师---数据库_第85张图片

真题2

软件设计师---数据库_第86张图片

真题3

软件设计师---数据库_第87张图片

视图

软件设计师---数据库_第88张图片

软件设计师---数据库_第89张图片

软件设计师---数据库_第90张图片

这里注意视图它是虚拟表,对视图进行的增改操作实际上是对基本表进行操作,例如上面的创建student视图,它的基本表就是学生表(也就是这个视图是在谁的基础上创建的),然后在视图中插入不符合where后面的条件的数据,视图里不会新增这条数据,这条数据会新增到基本表中去,如果符合where后面的条件,那这条数据会到视图中去,这样就确保了视图中的数据都是符合where后面的条件的数据,例如上面的第二条插入会到视图中,第一条不会,第一条插入会到基本表中去

软件设计师---数据库_第91张图片

如果加了with check option的话就意味着这个视图的增改删操作必须要满足where 后面的条件才可以进行操作,不然就会报错,例如上面第一条插入4444的数据是软件工程专业,而where后面的条件是专业为计算机专业,所以会报错,插入失败,第二条同理会成功插入,也就是在这个例子中只能对专业是计算机专业的进行插入删除修改操作,如果专业不是计算机的就不能操作,但是可以对姓名增改删操作,因为where后面的条件并没有对姓名做出要求,只要你要操作的那个姓名他的专业是计算机就行

真题

真题1

软件设计师---数据库_第92张图片

真题2

软件设计师---数据库_第93张图片

索引

软件设计师---数据库_第94张图片

软件设计师---数据库_第95张图片

真题

软件设计师---数据库_第96张图片

关系模式

软件设计师---数据库_第97张图片

这里的箭头可以理解为决定的意思,例如学号--->姓名,可以理解为学号决定姓名

函数依赖

软件设计师---数据库_第98张图片

完整函数依赖就是一个组合里的任何真子集不能够决定依赖关系,例如(学号,课程号)----->成绩这是一个组合关系的函数依赖,表示学号和课程号两个一起决定成绩,这其中任何子集不能单独来确定这个依赖关系,例如学号不能单独决定成绩,课程号也是不能单独决定成绩,这就是完整函数依赖,如果不是一个组合,就是一一对应的函数依赖关系那一定是完整函数依赖,例如学号---->姓名这样的就是完整函数依赖,它不是一个组合,(学号,课程号)----->成绩这样的才是一个组合,这里还要理解真子集的含义,例如(A,B,C)的真子集有(A),(B),(C),(A,B),(A,C),(B,C)跟数学里的概念是一样的

部分函数依赖就是一个组合里任意真子集能够决定依赖关系,例如(学号,课程号)---->姓名这个组合关系的函数依赖中,单一个学号就能够决定姓名了,也跟就不需要课程号,所以这就是部分函数依赖

码和推理规则

软件设计师---数据库_第99张图片

属性闭包计算(也就是求主键)

如果只有一个候选键那就是主键,有多个候选键那就挑一个做主键

软件设计师---数据库_第100张图片

软件设计师---数据库_第101张图片

软件设计师---数据库_第102张图片

真题

真题1

软件设计师---数据库_第103张图片

这里主要是之前我有个误解,我觉得AC如果是候选键的话那AC是一个整体,不能用C--->B这个依赖关系,事实上可以直接用

做题技巧:但凡出现在箭头右边的都不可能是候选键,例如上面这题箭头右边有B和C,那直接排除,剩下一个A,也就是这个A一定是候选键或者候选键中一定要有A,然后发现A不能单独推出U,所以就试一下AC和AB能不能推出

然后主属性是指候选键包含的属性那就是主属性,例如上面的AC和AB为候选键,那主属性就有ABC

讲解地址:2011年上半年第55、56题_哔哩哔哩_bilibili

这些题目在我没听这个博主的课之前是完全不会做,但是现在我都会做,所以后面题目都是没听直接做的,就不会有什么笔记,讲解地址就放这一个,顺序跟视频题目顺序是一样的,以此类推,不懂直接去听讲解

真题2

软件设计师---数据库_第104张图片

真题3

软件设计师---数据库_第105张图片

某个关系的主键为全码,那这个关系的主键就是它所有属性组合在一起,例如上面的主键就是HLMP

真题4

软件设计师---数据库_第106张图片

真题5

软件设计师---数据库_第107张图片

这里的什么是冗余的这个我是第一次见到这样的题型,我的做法是直接把对应的选项去掉看能不能用A1这个主键去推出对应的U,如果可以那就是冗余的,一个个试,试出C是多余的,在F中去掉C选项的这个函数依赖照样退出U

真题6

软件设计师---数据库_第108张图片

真题7

软件设计师---数据库_第109张图片

这里可以立马确定A1,但是单独A1推不出来U,所以直接快速排除没有A1的候选键直接选C,都不用一个个试了,候选键必须包含A1

真题8

软件设计师---数据库_第110张图片

第二题中用到了那个推理规则,A-->BC那么就可以得出A-->B,A-->C,这是分解法则,经常用到,需要掌握的,

然后看看有没有A-->B,B-->C这样的的,因为这样可推出A-->C

真题9

软件设计师---数据库_第111张图片

这里注意AC-->D是不能拆了,如果是 AC-->DE的话应该可以拆成AC-->D和AC-->E

真题10

软件设计师---数据库_第112张图片

真题11

软件设计师---数据库_第113张图片

讲解地址:2021年下半年第52、53题_哔哩哔哩_bilibili

这里主要是第二题有个推理的过程,A和B我是推理出来了,然后C选项是可以推出A1-->A4和A2-->A4,然后就得出A1A2-->A4,这个的话在推理原则里并没有这条,所以只是可以这样理解,相比D选项压根推不了,所以这里选择最优解为D选项,总体来说题目不严谨

范式

软件设计师---数据库_第114张图片

第一范式

软件设计师---数据库_第115张图片

上面这个是不符合第一范式,因为它的工资可以再进行细分,要符合第一范式那就变成下面这样就可以了

软件设计师---数据库_第116张图片

第一范式说白了就是看属性列表能不能在继续分,能继续分那就不符合第一范式

然后第一范式会有数据冗余和更新异常(包括修改,删除,插入异常)这些问题并存在部分函数依赖

数据冗余容易理解,例如上图画出来的可以看出是内容是一样的,那就重复了很多次这就是数据冗余

更新异常中的修改异常,好比修改红色框中的张三为张四,那就必须把所有的张三都改成张四,如果只改一条就会出现问题,查询学号为001的数据的时候那姓名可能是张三也可能是张四,这就是修改异常

更新异常中的删除异常,好比删除高等数学这个课程名,但是上面这个表中要删除高等数学这个课程名那整一条数据都会被删除掉,也就是孙七这条记录都删除了,而我只是想删除这个课程,这就是删除异常

更新异常中的插入异常,好比我只是想要插入一个学生的信息是插入不成功的,因为上面这个表中主键是学号和课程号,由于主键的完整性约束,不能为空或部分为空,无论是单独插入学生信息还是单独插入课表信息都是插入失败,必须两个都插入才能成功,这就是插入异常

第二范式

软件设计师---数据库_第117张图片

第二范式是在第一范式的基础上解决了部分函数依赖的问题得来的,第二范式要求每个非主属性都完全依赖于候选键,上面的例子中候选键是学号和课程号,所以学号和课程号都是主属性,其他的都是非主属性,例如姓名是非主属性,由于姓名是由学号决定的,跟课程号毫无关系,所以姓名只是部分依赖于候选键,因此不符合第二范式的要求,但是符合第一范式

软件设计师---数据库_第118张图片

软件设计师---数据库_第119张图片

前面说的那个例子符合第一范式不符合第二范式,只要消除了部分函数依赖就能够转为第二范式,往往都是通过分解关系来实现消除部分函数依赖的,例如上面的把前面的关系分解成三个关系后就都满足于完全函数依赖(也就是把一个表分解为三个表),所以它是符合第二范式的

回炉重造地址:关系模式分解消除部分函数依赖_哔哩哔哩_bilibili

第二范式只是解决了第一范式的部分函数依赖问题,但是数据冗余和更新异常没有完全解决,因为存在传递函数依赖,例如上面的 学号-->学院,学院-->院长,得出学号-->院长

第三范式

软件设计师---数据库_第120张图片

第三范式是在第二范式的基础上,并且消除了非主属性的传递依赖问题得到的,原来学号-->学院,学院-->院长,得出学号-->院长这是传递依赖,一般把后面的那个关系直接给拿出来单独作为一个关系,例如这个传递依赖中把后面的学院-->院长从原来的关系中抽离出来作为一个新的关系就可以解决传递依赖这个问题了

第三范式只是解决了第二范式的传递函数依赖问题,但是数据冗余和更新异常没有完全解决,因为存在主属性对候选码的部分依赖和传递依赖

软件设计师---数据库_第121张图片

例如上图就是存在主属性对候选码的部分依赖这个问题,在F函数关系依赖中,红色画出的就是存在主属性对候选码的部分依赖的问题,因为候选码是(书店和图书)。而它书店就能够推出店长,跟图书没啥关系,所以存在部分依赖

回炉重造地址:第三范式和消除传递函数依赖_哔哩哔哩_bilibili

BC范式

软件设计师---数据库_第122张图片

BC范式是在第三范式的基础上解决了存在主属性对候选码的部分依赖和传递依赖这个问题,同时还消除了插入和删除异常,下面就是把上面的表再进行分解,解决了存在主属性对候选码的部分依赖和传递依赖这个问题从而到达了BC范式

软件设计师---数据库_第123张图片

回炉重造地址:消除主属性对候选码的部分、传递函数依赖_哔哩哔哩_bilibili

第四范式

软件设计师---数据库_第124张图片

软件设计师---数据库_第125张图片

回炉重造地址:第四范式_哔哩哔哩_bilibili

总结

软件设计师---数据库_第126张图片

1、一般软考中的相关题目是都符合第一范式的,不需要考虑

2、判断非主属性是否对候选键存在部分函数依赖,说白了就是看非主属性能不能只靠候选键的一部分就可以推理出来(靠候选键组合中任意一个主属性就可以推出那个非主属性的就不是第二范式,但是如果是组合中其中一个和其他非主属性组合在一起推出非主属性的那就没问题)

3、看有没有传递依赖,存在传递依赖不符合第三范式

4、看主属性对候选码有没有传递依赖或部分依赖,也就是主属性可以由候选码中任意一个就推出来那就不符合BCNF范式

5、看有没有多值依赖,并且多值依赖的左边是码,例如A->B,A->C,并且A是码,那就符合第四范式

做题技巧

首先知道软考的相关这类题都是符合第一范式的,所以可以直接判断是否符合第二范式,判断第二范式首先要知道这个关系的候选键是什么?这是为了知道哪些属性是主属性?哪些是非主属性?这个例题中零件号和供应商的组合属性是候选键,所以主属性是零件号和供应商,其他都是非主属性,然后判断非主属性是否对候选键存在部分函数依赖,说白了就是看非主属性能不能只靠候选键的一部分就可以推理出来(靠候选键组合中任意一个主属性就可以推出那个非主属性的就不是第二范式,但是如果是组合中其中一个和其他非主属性组合在一起推出非主属性的那就没问题),例如零件名称是非主属性,根据函数依赖关系,零件号-->零件名称,可以看出这个非主属性只需要零件号就能推出来,跟候选键中的供应商没屁关系,所以就是存在部分依赖,不符合第二范式!所以是第一范式!

候选码是EM,所以主属性是E和M,非主属性是N,Q,L,然后去函数依赖集里看非主属性能不能只靠候选键的一部分就可以推理出来,发现E可以直接推出N,不需要M,也就是我所说的只靠候选键的一部分就可以推出某个非主属性,所以不符合第二范式,应该是第一范式!

软件设计师---数据库_第127张图片

候选键是学生和时间的组合,主属性就是时间和学生,非主属性就是课程,教师,成绩,教室,这些非主属性都不能由候选键的部分推理出来,所以符合第二范式,然后在判断符不符合第三范式

软件设计师---数据库_第128张图片

这里由于存在传递函数依赖,所以不符合第三范式,挺难搞的这个题,它用到了伪传递原则,然后可以推理出(时间,学生)时间-->课程这个关系,由于这两个时间是一样的所以去掉一个后最终是(时间,学生)-->课程,然后课程-->教师,所以得到(时间,学生)-->教师,这是传递函数依赖,因此不符合第三范式,所以可以看出其实就是把那些关系通过那些原则去变形,挖掘其中隐藏的关系,看看有没有存在传递函数依赖的,有就不符合第三范式

回炉重造地址:判断传递函数依赖技巧_哔哩哔哩_bilibili

真题

真题1

软件设计师---数据库_第129张图片

这里我是看存不存在主属性对候选码的部分依赖或传递依赖来判断能不能达到BC范式,对于R2关系来说,主属性是学生和课程,非主属性是成绩,候选键是学生和课程的组合,可以看到候选键中是包含主属性的,所以不存在主属性对候选码的部分依赖,就一个函数关系依赖,也不存在主属性对候选码的传递依赖,所以满足BC范式,第四范式主要是看存不存在多值依赖所谓的多值依赖就是一个属性决定很多个其他属性,例如A-->B,A-->C,A-->D,这里一个A决定了BCD三个属性,也就是多值依赖

讲解地址:2010年下半年第54、55、56题_哔哩哔哩_bilibili

真题2

软件设计师---数据库_第130张图片

真题3

软件设计师---数据库_第131张图片

真题4

真题5

软件设计师---数据库_第132张图片

真题6

软件设计师---数据库_第133张图片

这里分享一个判断第二范式的技巧,找到主属性A2和A5后,那么其他都非主属性都知道了,直接看非主属性是怎么得到的?如果是由单独的一个A2或A5就能得到那就不符合第二范式的要求,例如上面题目的A1是由A5和A6一起得到的,所以这个A1是不存在部分函数依赖的,如果说上面关系中有A5-->A1,那就存在部分函数依赖,同理,再看A3是由A1得到的,跟A2和A5没屁关系,所以也不存在部分函数依赖的,总之,只有非主属性是靠单独的一个主属性就能推理得到的那就是存在部分函数依赖,不符合第二范式,其他都是不存在部分函数依赖的

关系分解

真题1

软件设计师---数据库_第134张图片

软件设计师---数据库_第135张图片

这个题目跟前面做的不一样,它并没有给函数依赖关系,而是直接给了个表,首先不要慌,可以看到每一列都有重复的,所以一定是一个组合的候选键,这里选员工号和家庭成员组合为候选键,为什么不选成员关系呢?因为成员关系中可能会有多个兄弟姐妹,所以主属性是员工号和家庭成员,然后姓名是可以直接由员工号推出,存在部分函数依赖,不符合第二范式,主要是分解表怎么分解?自己看视频去

讲解地址:2009年上半年第52、53、54题_哔哩哔哩_bilibili

真题2

软件设计师---数据库_第136张图片

这里我第一想法是分解成A选项,但是当我看到库存量的时候我发现单靠一个供应商决定不了,所以A选项是有问题的,库存量应该是由零件号和供应商组合决定,所以C选项没问题

讲解地址:2010年上半年第56题_哔哩哔哩_bilibili

真题3

软件设计师---数据库_第137张图片

讲解地址:2016年上半年第54、55、56题_哔哩哔哩_bilibili

无损连接和保持函数依赖

软件设计师---数据库_第138张图片

软件设计师---数据库_第139张图片

这里我是没看的太懂

回炉重造地址:无损连接和保持函数依赖_哔哩哔哩_bilibili

真题1

软件设计师---数据库_第140张图片

是否保存函数依赖就直接看分解后的两个关系中是否有原来函数依赖集的那些关系依赖,如果没有那就不保持!

讲解地址2013年上半年第55题_哔哩哔哩_bilibili

真题2

软件设计师---数据库_第141张图片

判断是有损连接还是无损连接直接把分解后的关系作自然连接,看看得到的结果是不是跟原来的R一致,如果不一致那就是有损连接,否则无损连接,在这里的自然连接就是把分解后所有关系的属性列合在一起去个重就可以了,例如上面的把分解后的两个关系中的属性列合在一起是A1A2A1A3,A1重复,去重后是A1A2A3,跟R对比少了A4,是有损连接,这里要注意自然连接是必须要两个关系有公共的属性自然连接才有值,否则就是空集例如上面的都有公共属性A1,所以自然连接不是空集,但如果是(A1,A2),(A3,A4)这样的就没有公共属性,自然连接就是空集,如果多个关系自然连接,只要有一个自然连接结果是空集,那就整个关系自然连接的结果都是空集

讲解地址:2015年上半年第52题_哔哩哔哩_bilibili

真题3

软件设计师---数据库_第142张图片

讲解地址:2017年下半年第54、55题_哔哩哔哩_bilibili

数据库设计

软件设计师---数据库_第143张图片

软件设计师---数据库_第144张图片

上面图红色框出来的都是重点

需求分析

软件设计师---数据库_第145张图片

软件设计师---数据库_第146张图片

E-R图(实体-联系-属性)

软件设计师---数据库_第147张图片

软件设计师---数据库_第148张图片

软件设计师---数据库_第149张图片

真题

真题1

软件设计师---数据库_第150张图片

真题2

软件设计师---数据库_第151张图片

讲解地址:2010年下半年第52、53题_哔哩哔哩_bilibili

软件设计师---数据库_第152张图片

弱实体

软件设计师---数据库_第153张图片

概念设计(合并E-R图)

软件设计师---数据库_第154张图片

软件设计师---数据库_第155张图片

软件设计师---数据库_第156张图片

重点是这个E-R图合并的时候的三种冲突

软件设计师---数据库_第157张图片

真题

软件设计师---数据库_第158张图片

讲解地址:2020年下半年第51、52题_哔哩哔哩_bilibili(51题我没看懂)

逻辑设计(把E-R图转为对应的关系模式)

软件设计师---数据库_第159张图片

一对一转换

软件设计师---数据库_第160张图片

一对一转换就是把联系对应的属性随便放到一个实体里面(注意联系本身不放),然后把另外的实体的主键也放到该实体里

一对多转换

软件设计师---数据库_第161张图片

一对多转换就是把联系对应的属性放到多方实体类中(注意联系本身不放),并且把其他实体的主键也放到该多方实体类中

多对多转换

软件设计师---数据库_第162张图片

多对多转换就是把联系单独作为一个新的关系,把对应联系的实体的主键的组合作为这个新关系的主键

关系模式的规范化

软件设计师---数据库_第163张图片

真题

真题1

软件设计师---数据库_第164张图片

真题2

软件设计师---数据库_第165张图片

这里第54题我是选了A选项,但是如果一个病人总是找一个医生来看病的话,那么通过病历号和职工号是没办法唯一标识一条记录的,所以还要加一个就诊时间才能唯一标识一条记录

讲解地址:2011年上半年第51、52、53、54题_哔哩哔哩_bilibili

真题3

软件设计师---数据库_第166张图片

真题4

软件设计师---数据库_第167张图片

这个题目的54小题我是选了B,因为我觉得电话和联系方式是一个东西,属于命名冲突,这就是搞混淆了,命名冲突出现在E-R图组合里,而这里只是一个自然连接,说白了就是我想太多了

真题5

软件设计师---数据库_第168张图片

真题6

软件设计师---数据库_第169张图片

真题7

软件设计师---数据库_第170张图片

真题8

软件设计师---数据库_第171张图片

事务管理

软件设计师---数据库_第172张图片

真题

软件设计师---数据库_第173张图片

数据库备份和恢复

软件设计师---数据库_第174张图片

软件设计师---数据库_第175张图片

软件设计师---数据库_第176张图片

真题1

软件设计师---数据库_第177张图片

真题2

软件设计师---数据库_第178张图片

真题3

软件设计师---数据库_第179张图片

把对数据的增删改操作写到日志文件中

封锁

软件设计师---数据库_第180张图片

排它锁就是加了这个锁那么其他的排它锁和共享锁都不能加了,直到这个锁被释放了才可以加其他的排它锁和共享锁

共享锁就是加了这个锁那么不能加排它锁,但是可以加共享锁,直到这个锁被释放了才可以加排它锁

真题1

真题2

软件设计师---数据库_第181张图片

分布式数据库

软件设计师---数据库_第182张图片

真题

软件设计师---数据库_第183张图片

杂七杂八

以下这些题目很多都是不按套路出牌的,出现的概率非常小,所以就当课外扩充知识点,随便背一下就行了

杂题1

软件设计师---数据库_第184张图片

多对多的转换是要转换成一个新的关系模式,并且把对应的实体的主键作为候选键

杂题2

软件设计师---数据库_第185张图片

杂题3

软件设计师---数据库_第186张图片

杂题4

软件设计师---数据库_第187张图片

讲解地址:2018年上半年第54、55题_哔哩哔哩_bilibili

杂题5

软件设计师---数据库_第188张图片

杂题6

软件设计师---数据库_第189张图片

你可能感兴趣的:(软件设计师(上午题),数据库,java,开发语言)