网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
- 问题一 就是补全图中缺失的部分
- 看题目描述 那种一个 对 多个 or 多对多 or 一对一 (一 :用数字
1
写在线上即可 多:*
这个符号写线上 , 中间的菱形 写动作的名字 如果题目有改写为联系1 or 联系2 则写联系x)
问题二
- 就是写缺失的候选码 : 找信息里面的补上, 再看该实体是否与其他实体有联系 , 则要加上另外一个实体的主键作为该实体的外键约束
- 主键和外键的区别 :
- 主键 看原文 + 看题目描述 如果出现xx和xx唯一识别xxx 则这多个主键和另外的外键需要一起(xx,xx,xx) 作为主键 否则就只有一个主键
- 外键就是相对于主键 的其他外键
问题三
- 题目要求补上缺失的“弱实体” 则要去图中画上实体 以及联系 , 修改"实体"的关系模式 :就是在实体的候选码中增添码,并且修改为主键约束 or 外键 约束 (主键约束 是______ 外键约束是 _ _ _ _ _ )
问题四
多背 那些错误冗余什么的
概念数据模型 (看看就行)
- 层次模型 :树结构
- 网状模型:图结构
关系模型 (主要)
三级模式结构
- 外模式 (也称子模式or用户模式)对应 外部视图
- 概念模式(也称
模式
) 对应 对应DMBS
(数据库管理系统)中的基本表 - 内模式 (也称存储模式)对应 数据库里面的 存储文件
两级映像
关系模型的基本术语
- 码 == 键
- 这个主属性的描述有问题,其实说白了就是所有候选键都是主属性,其他都是非主属性
元组就是表中一行数据,属性就是表中的列表名称
完整性约束
关系代数符
集合运算符
- 投影和选择的符号别搞混淆
- 投影默认第i列 下标映射为数值i
- 选择就是选中符合条件的指定的行然后把它们拼在一起组成新的关系
- 表示查找的值 需要用单引号括起来 , 如果是数字的话就表示行的关系
加上其他符号 or and … -
连接 Join
- 符号
θ连接 西塔
- 连接其实就是在两个关系的笛卡尔积中选择符合条件的行**,而上面这种连接其实就是用比较运算符来进行比较**
这上面的字母比较是比较26字母先后顺序
等值连接
- 等值连接就是笛卡尔积中某一列和另外一列相等就符合要求,然后选择出来就行了
自然连接
- 自然连接的条件是看有哪些公共的属性(其实就是列名一样),像上图明显A和C是两个关系中都有的公共属性,所以就是在笛卡尔积中找R.A=S.A并且R.C=S.C(也就是两个关系职中A和C必须同时相等才是符合要求的,如果有三个公共属性,那么这三个公共属性要求在两个关系中都相同,以此类推),符合这个条件的就找出来
左外连接
右外连接
全外连接
- 全外连接是自然连接的结果加左右外连接的结果
逻辑运算符
- 这里与和或是用来连接上面选择或者投影的条件的连接词,与就是and,或就是or,或只要两边条件有一方满足就可以了
关系代数转SQL语句
投影状SQL语句
选择转SQL语句
笛卡尔积转SQL语句
自然连接转SQL语句
- 先把它的关系代数变形为上面等价的笛卡尔积表达式,然后在转
SQL
SQL语句
SQL语句的分类
数据定义语句(DDL)
- 1、 建立数据库
create datebase 数据库名
- 2、建立基本表
3、 修改基本表结构
alter table test modify f3 float ;
- 修改不是指的修改列的表名,而是指的修改列的类型,一般用上面
modify
来进行修改
primary key
是主键约束(功能和not null unique
一样)foreign key
是外键约束(上面的外键约束语句意思是对sid设置外键约束并且参照S表中的sid)check
是用户自定义完整性约束(上面语句意思是检查成绩是否在0-100
范围内,也就是在表中插入数据的时候成绩这一列会有一个自动检查成绩范围的约束,不在这个范围就会报错)
数据操纵语言(DML)
数据查询语言(DQL)
投影查询
选择查询
排序查询
- 注意上面红色画出来的语句不是说课程号和分数都是降序排列,这里课程号没有指明是什么排序,那就是默认的升序,分数指明了是降序排序,但是这里是多条件排序,所以是先按课程号进行升序排序,如果课程号相同,那就按分数降序排序
聚合函数查询(注意聚合函数只会返回一个结果值)
- 上面这句是验证分数的平均值,也就是
AVG
集合函数
- 指的一提的是上面这样写是没问题的,可以进行加减乘除运算(这是我的知识漏洞)
同时要注意count(*)
和count(列表名)
的区别,区别就是count(*)
会把null
也算作一个值,会把null
这条记录进行统计,而count(列表名)
就直接忽视null
的记录,不会把这条记录进行统计。
- 指的一提的是上面这样写是没问题的,可以进行加减乘除运算(这是我的知识漏洞)
- 这是查询课程号的数量并且去重
- 数据分组
分组后
- 所谓的分组就是把属性值相同的分为一组,例如上面是按课程号分组的,那么课程号中相同的值就会被分作一组,分组主要用于聚合函数查询只能返回一个值,如果想看具体的情况就使用分组
- 这里要注意
having
和where
的使用区别,区别就是如果拼接的条件里用到了聚合函数,那就只能用having
,不能用where
!
内连接
非等值连接
自连接
外连接
子查询(先子查询再主查询)
数据控制语言 (DCL)
- SQL访问控制
视图
视图的创建与删除
- 如果插入的不满足条件的话, 那么就会插入失败 不显示 。
- with check option 就是用来判断是否操作成功的 , 如果去修改原视图的判断(where) 语句的内容 就会报错, 如果加了with check option的话就意味着这个视图的增改删操作必须要满足where 后面的条件才可以进行操作,不然就会报错
索引
关系模式
- 因为通过单个关系 是没办法确定一个元组 , 因为内容不唯一性 。
- 这里的箭头可以理解为决定的意思,例如学号—>姓名,可以理解为学号决定姓名
关系数据库的规范化
函数依赖
- 真子集
完整函数依赖就是一个组合里的任何真子集不能够决定依赖关系,例如(学号,课程号)----->成绩这是一个组合关系的函数依赖,表示学号和课程号两个一起决定成绩,这其中任何子集不能单独来确定这个依赖关系,例如学号不能单独决定成绩,课程号也是不能单独决定成绩,这就是完整函数依赖,如果不是一个组合,就是一一对应的函数依赖关系那一定是完整函数依赖
,例如学号---->姓名这样的就是完整函数依赖,它不是一个组合,(学号,课程号)----->成绩这样的才是一个组合,这里还要理解真子集的含义,例如(A,B,C)的真子集有(A),(B),©,(A,B),(A,C),(B,C)跟数学里的概念是一样的部分函数依赖就是一个组合里任意真子集能够决定依赖关系,例如(学号,课程号)---->姓名这个组合关系的函数依赖中,单一个学号就能够决定姓名了,也跟就不需要课程号,所以这就是部分函数依赖。
码和推理规则
- 如果只有一个候选键那就是主键,有多个候选键那就挑一个做主键
属性的闭包运算 (求主键)
- 如果包含 u 里面的全部元素, 则为闭包
- 技巧 直接看 F中箭头右边 所有存在的字母 一般不存在的就为主键 然后就是各种尝试
- 做题技巧:但凡出现在箭头右边的都不可能是候选键,例如上面这题箭头右边有B和C,那直接排除,剩下一个A,也就是这个A一定是候选键或者候选键中一定要有A,然后发现A不能单独推出U,所以就试一下AC和AB能不能推出
然后主属性是指候选键包含的属性那就是主属性,例如上面的AC和AB为候选键,那主属性就有ABC
- 上图 蓝色就为主键
红色
为推出来的内容
范式
第一范式
上面这个是不符合第一范式,因为它的工资可以再进行细分,要符合第一范式那就变成下面这样就可以了
- 第一范式说白了就是看属性列表能不能在继续分,能继续分那就不符合第一范式
然后第一范式会有数据冗余和 更新异常(包括修改,删除,插入异常)这些问题并存在部分函数依赖
数据冗余容易理解,例如上图画出来的可以看出是内容是一样的,那就重复了很多次这就是数据冗余 - 更新异常中的修改异常,好比修改红色框中的张三为张四,那就必须把所有的张三都改成张四,如果只改一条就会出现问题,查询学号为001的数据的时候那姓名可能是张三也可能是张四,这就是修改异常
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
是内容是一样的,那就重复了很多次这就是数据冗余
- 更新异常中的修改异常,好比修改红色框中的张三为张四,那就必须把所有的张三都改成张四,如果只改一条就会出现问题,查询学号为001的数据的时候那姓名可能是张三也可能是张四,这就是修改异常
[外链图片转存中…(img-ZUDKTORb-1715667557273)]
[外链图片转存中…(img-KuC4F6mB-1715667557273)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!