绪论
DBS中的4个基本概念
- 数据
- DB
- DBMS
- DBS
DB发展阶段
1.人工 2. 文件 3. DBMS
数据模型
- 概念模型
- 实体(属性,码)
- 实体型
- 实体集
- 逻辑模型 2.1 层次模型 2.2 网状模型 2.3 关系模型 一张表即为关系,表中一行为元组,一列为属性(多列成组)(放在元组中称分量,其中起唯一标识作用的为码,具有相同数据类型的为域)
- 物理模型
ER图
Entity Relationship Diagram,实体-联系图
- 实体型
- 属性
- 联系
- 实体间:实体型之间的联系
- 实体内:属性间的联系
用来描述现实世界的概念模型
DBS结构
- 三级模式
- 外模式(用户模式)
- 模式(逻辑模式)
- 内模式(存储模式)
- 2级映像
- 外模式/模式
- 模式/内模式
3级模式和2级映像关联:底层模式改变后,可以通过修改映像实现上层无需改变
关系数据库
关系代数
抽象的查询语句,用对关系的运算表示查询
1.1 运算对象 1.2 运算符 1.3 运算结果
1.2 运算符-详细信息
1.2.1 集合运算符 上述运算符体现在表格中,∩∪-都很好理解,主要是笛卡尔积 笛卡尔积相当于2层for循环,第一层循环一表,第2层循环另一表,实现两张表的组合
1.2.2 关系运算符
-
选择,即添加条件
-
投影,只想查询部分属性,即对目标属性进行投影
(SC是表名)
- 连接
注意多出去的横线在哪边就是哪个方向的连接
- 两个表进行自然连接,找到共同属性,具有共同属性的元组进行笛卡尔积。两个表的共同属性仅保留一次。
没有用到的被舍弃元组成为悬浮元组,其他连接就是将悬浮元组以不同的方式进行保留
- 两个表进行外连接,就是在自然连接基础上,将左右两张表的悬浮元组全部保留在结果中,悬浮元组不存在但最终结果中存在的属性设为空
- 外连接是左右两张表的悬浮元组均保留,左/右连接就是仅保存左/右一表中的悬浮元组,悬浮元组不存在属性在最终结果中设空
- 除法 表A除以表B,首先结果应当是把A属性中那些处在B属性中的属性去掉后的一张表,即下图中最终结果只剩下姓名。最终结果留下的,应当是A中把B属性去掉后,其他属性均相同的元组集合中,B属性分量包含B中的所有值的那些元组,下图中,元组集合有3个,分别为张三,李四,王五,而只有张三和王五对应B属性的分量,即选修课程,同时包含数据库和网络,因此最后结果就是张三和王五
关系完整性
- 实体完整性 主键唯一且非空
- 参照完整性 外键为空或对应其他表主键
- 用户自定义完整性
SQL
SQL语言分类
前面的D都是指data数据,最后的L都是值language语言,中间依次是DQMC
-
DDL,defination定义 定义基表,视图,索引
-
DQL,query查询 select
-
DML,manipulation操纵 insert,delete,update
-
DCL,control控制 表和视图授权,完整性规则描述,事务开始和结束控制
查询语句
-
起别名
select columnname (as) column_name_alias from tablename (table_name_alias)
-
去重
select distince column_name from table_name
-
加条件
-
聚集函数 查询column_name有多少行:
select count(column_name) from table_name
-
分组查询
应用场景
- 查询每个班级有多少学生:
select class, count(*) from student group by class;
- 查询人数小于30人的班级:
select class,count(*) from student group by class having count(*)<30
注: WHERE 关键子无法与聚合函数一起使用,筛选只能用having
- 连接
注意和[关系代数-1.2.2关系运算符-3.连接](## 关系代数)中提到的3种连接进行区分,关系运算符涉及到的连接仅有自然连接,外连接,左外连接,右外连接。在sql中涉及更多连接方式 同时注意区分sql中的连接方式和mysql中的连接方式是不同的,例如sql中是包含外连接full join的,但是mysql中并不包含,只是可以用其他连接实现相同的效果
连接主要是应用于多表查询
注意加条件时,使用的是
on
,注意与聚合函数的having
和where
进行区分
6.1 内连接 6.1 等值连接 6.3 自然连接 6.4 左右外连接 6.5 自连接
6.1 内连接
当条件为=
时,结果等于等值连接
之所以说内连接为等值连接的特例,是因为其除了相等条件,也可以选择其他条件
6.1 等值连接
通过“=”等号来连接多张表之间相字段对应的值,其产生的结果会出现重复列。
course是课程表,sc是学生成绩表,通过课程编号进行连接,最终结果中出现两列课程编号
select * from course,sc where course.cnum = sc.cnum;
6.3 自然连接
同[关系代数-1.2.2关系运算符-3.连接](## 关系代数)中提到的自然连接,属于特殊的等值连接,只是将等值连接中重复列去重
select * from course natural join sc;
6.4 左/右外连接
同[关系代数-1.2.2关系运算符-3.连接](## 关系代数)中提到的左/右外连接是相同效果
左/右外连接时,需要添加on条件
-
嵌套查询,使用
()
将嵌套部分包含起来 -
any和all
-
exists
-
查询结果的∩∪- 交集:
select语句1 union select语句2
并集:select语句1 intersect select语句2
差集:select语句1 except select语句2
DB安全性
1.数据库安全性控制 1.1 用户身份鉴别 1.2 存取控制 1.3 自主存取控制方法
- 权限管理 常见权限
grant
授予权限
grant 权限 on 表名(列名) to 用户 with grant option
列名可选,用户示例'root'@'%',with grant option会给予用户赋予其他用户相同权限的功能
revoke 权限 on 表名(列名) to 用户 cascade
cascade会把with grant option用户赋予其他用户的权限一同撤销
- 视图
相当于外模式,仅显示部分数据,且内容会实时更新
create view cname as select cname from course;
关系数据理论
数据依赖:函数依赖 | 多值依赖 函数依赖关系:完全vs部分 | 传递依赖 | 平凡vs非平凡
平凡即属性集能决定自己的子集,属于废话
平凡函数依赖关系是指,如果属性集合X包含了属性集合A,那么就一定有X->A(X决定A)
候选码,主码,主属性,非主属性 候选码:能够唯一标识元组的属性或属性组 主码:被数据库设计者选中的,用来在实体集中区分不同实体的候选码 主属性:包含在任一候选码中的属性(候选码的并集,主属性不一定包含在主码中) 非主属性:不包含在任何候选码中的属性(候选码并集的补集)
范式:符合某一种级别的关系模式的集合 1、2、3、BCNF是属于函数依赖范畴下的 4、5NF是多值依赖范畴下的
2NF:每一个非主属性都完全依赖于任何一个候选码
e.g.
拆表(模式分解方法):谁跟你好,复制并将其带走 部分函数依赖,体现出的就是将所依赖的主属性复制一份,并结合依赖它的属性,单独组成一张表,从而解决部分函数依赖的问题
3NF:每一个非主属性都直接依赖于任何一个候选码,不存在传递依赖关系
- 找候选码,分清主属性和非主属性
- 从候选码出发,将候选码和非主属性的决定关系写出
- 把候选码内部的主属性和非主属性的决定关系写出
BCNF:在3NF基础上,满足每一个主属性都完全且直接依赖于任何一个不包含它候选码 在BCNF之前,考虑的都是非主属性和候选码之间的关系,但当主属性过多时,可能主属性本身和候选码之间存在一些冗余的关系
判断时的两种思路:1是用下面图中提到的方法,判断X->A,X是否包含非主属性; 2是根据定义,找到主属性和不包含它的候选码,确定是否存在部分和传递依赖
标签:候选,元组,运算符,概论,数据库系统,连接,select,属性 From: https://blog.51cto.com/u_14882565/8184720参考