绪论

DBS中的4个基本概念

  • 数据
  • DB
  • DBMS
  • DBS

DB发展阶段

1.人工 2. 文件 3. DBMS

数据模型

  1. 概念模型
  • 实体(属性,码)
  • 实体型
  • 实体集
  1. 逻辑模型 2.1 层次模型 2.2 网状模型 2.3 关系模型 一张表即为关系,表中一行为元组,一列为属性(多列成组)(放在元组中称分量,其中起唯一标识作用的为码,具有相同数据类型的为域)
  2. 物理模型

ER图

Entity Relationship Diagram,实体-联系图

  1. 实体型
  2. 属性
  3. 联系
  • 实体间:实体型之间的联系
  • 实体内:属性间的联系

用来描述现实世界的概念模型

DBS结构

  1. 三级模式
  • 外模式(用户模式)
  • 模式(逻辑模式)
  • 内模式(存储模式)
  1. 2级映像
  • 外模式/模式
  • 模式/内模式

3级模式和2级映像关联:底层模式改变后,可以通过修改映像实现上层无需改变

关系数据库

关系代数

抽象的查询语句,用对关系的运算表示查询

1.1 运算对象 1.2 运算符 1.3 运算结果

1.2 运算符-详细信息

1.2.1 集合运算符 上述运算符体现在表格中,∩∪-都很好理解,主要是笛卡尔积 笛卡尔积相当于2层for循环,第一层循环一表,第2层循环另一表,实现两张表的组合

1.2.2 关系运算符

  1. 选择,即添加条件

  2. 投影,只想查询部分属性,即对目标属性进行投影 image

(SC是表名)

  1. 连接 image

注意多出去的横线在哪边就是哪个方向的连接

  • 两个表进行自然连接,找到共同属性,具有共同属性的元组进行笛卡尔积。两个表的共同属性仅保留一次。 image

没有用到的被舍弃元组成为悬浮元组,其他连接就是将悬浮元组以不同的方式进行保留

  • 两个表进行外连接,就是在自然连接基础上,将左右两张表的悬浮元组全部保留在结果中,悬浮元组不存在但最终结果中存在的属性设为空
  • 外连接是左右两张表的悬浮元组均保留,左/右连接就是仅保存左/右一表中的悬浮元组,悬浮元组不存在属性在最终结果中设空
  1. 除法 表A除以表B,首先结果应当是把A属性中那些处在B属性中的属性去掉后的一张表,即下图中最终结果只剩下姓名。最终结果留下的,应当是A中把B属性去掉后,其他属性均相同的元组集合中,B属性分量包含B中的所有值的那些元组,下图中,元组集合有3个,分别为张三,李四,王五,而只有张三和王五对应B属性的分量,即选修课程,同时包含数据库和网络,因此最后结果就是张三和王五 image

关系完整性

  1. 实体完整性 主键唯一且非空
  2. 参照完整性 外键为空或对应其他表主键
  3. 用户自定义完整性

SQL

SQL语言分类

前面的D都是指data数据,最后的L都是值language语言,中间依次是DQMC

  • DDL,defination定义 定义基表,视图,索引

  • DQL,query查询 select

  • DML,manipulation操纵 insert,delete,update

  • DCL,control控制 表和视图授权,完整性规则描述,事务开始和结束控制

查询语句

  1. 起别名 select columnname (as) column_name_alias from tablename (table_name_alias)

  2. 去重 select distince column_name from table_name

  3. 加条件

  4. 聚集函数 查询column_name有多少行: select count(column_name) from table_name

  5. 分组查询

应用场景

  1. 查询每个班级有多少学生: select class, count(*) from student group by class;
  2. 查询人数小于30人的班级: select class,count(*) from student group by class having count(*)<30

注: WHERE 关键子无法与聚合函数一起使用,筛选只能用having

  1. 连接

注意和[关系代数-1.2.2关系运算符-3.连接](## 关系代数)中提到的3种连接进行区分,关系运算符涉及到的连接仅有自然连接,外连接,左外连接,右外连接。在sql中涉及更多连接方式 同时注意区分sql中的连接方式和mysql中的连接方式是不同的,例如sql中是包含外连接full join的,但是mysql中并不包含,只是可以用其他连接实现相同的效果

连接主要是应用于多表查询

注意加条件时,使用的是on,注意与聚合函数的havingwhere进行区分

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条件

  1. 嵌套查询,使用()将嵌套部分包含起来

  2. any和all

  3. exists

  4. 查询结果的∩∪- 交集:select语句1 union select语句2 并集: select语句1 intersect select语句2 差集: select语句1 except select语句2

DB安全性

1.数据库安全性控制 1.1 用户身份鉴别 1.2 存取控制 1.3 自主存取控制方法

  1. 权限管理 常见权限

grant授予权限 grant 权限 on 表名(列名) to 用户 with grant option

列名可选,用户示例'root'@'%',with grant option会给予用户赋予其他用户相同权限的功能

revoke 权限 on 表名(列名) to 用户 cascade

cascade会把with grant option用户赋予其他用户的权限一同撤销

  1. 视图 相当于外模式,仅显示部分数据,且内容会实时更新 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:每一个非主属性都直接依赖于任何一个候选码,不存在传递依赖关系

  1. 找候选码,分清主属性和非主属性
  2. 从候选码出发,将候选码和非主属性的决定关系写出
  3. 把候选码内部的主属性和非主属性的决定关系写出

BCNF:在3NF基础上,满足每一个主属性都完全且直接依赖于任何一个不包含它候选码 在BCNF之前,考虑的都是非主属性和候选码之间的关系,但当主属性过多时,可能主属性本身和候选码之间存在一些冗余的关系

判断时的两种思路:1是用下面图中提到的方法,判断X->A,X是否包含非主属性; 2是根据定义,找到主属性和不包含它的候选码,确定是否存在部分和传递依赖

参考