数据库系统——基础篇
数据库系统的结构
数据模型
- 概念模型:由工程人员给出的一系列定义来对数据进行信息建模得到的模型。
- 逻辑模型:存在某种结构或逻辑关系的数据模型。
数据模型组成
- 数据结构
- 数据操作
- 数据完整性约束
- 实体完整性:主键不重复且不为空
- 参照完整性:与外键相关,不出现不存在的外键
三级模式,两级映像
三级模式
- 内模式:也称为存储模式,一个数据库的内模式唯一,是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。
- 模式:也称为逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
- 外模式:也称为子模式或用户模式,是用户可见和使用的局部数据的逻辑结构和特征的描述,是用户的数据视图,是与某一应用有关的数据的逻辑表示。
两级映像
- 外模式/模式映像:保证了数据与程序的逻辑独立性,即模式改变时,编写的应用程序不变。
- 模式/内模式映像:保证了数据与程序的物理独立性,即存储结构改变时,模式保持不变,当然,应用程序也保持不变。
关系数据模型
关系代数
- 基本关系操作:选择、投影、并、差、笛卡尔积
- 传统的集合运算:并、差、交、笛卡尔积
- 专门的关系运算:选择、投影、连接、除法
选择
在关系 R 中选择满足给定条件的元组(行),返回的是一组元组
投影
从关系 R 中选择出若干属性列组成新关系,返回的是一个新的关系
连接
从两个关系的笛卡尔积中选取满足一定条件的元组,返回的事一个新的关系
若满足的关系为属性间的相等关系,则为等值连接
等值连接得到的关系中去除重复列得到关系,为自然连接
自然连接中保留因为不存在公共属性上值相等的悬浮元组的关系,为外连接
除法
T = R/S,则 T 包含所有在 R 但不在 S 中的属性及值,且 T 的元组与 S 的元组的所有组合都在 R 中
关系数据库标准语言 SQL
模式相关语句
create schema <模式名> authorization <用户名> [<表定义字句> | <视图定义子句> | <授权定义子句>];
drop schema <模式名> <CASCADE | RESTRICT>;
MySQL官方文档指出,从概念上讲,模式是一组相互关联的数据库对象,如表,表列,列的数据类型,索引,外键等等。但是从物理层面上来说,模式与数据库是同义的。你可以在MySQL的SQL语法中用关键字SCHEMA替代DATABASE,例如使用CREATE SCHEMA来代替CREATE DATABASE。
基本表相关语句
create table <表名> (<列名> <数据类型> [列级完整性约束条件]
[, <列名> <数据类型> [列级完整性约束条件]]
...
[, <表级完整性约束条件>]);
alter table <表名>
[add [column] <新列名> <数据类型> [列级完整性约束条件]]
[add <表级完整性约束条件>]
[drop [column] <列名> [CASCADE | RESTRICT]]
[drop constraint <完整列约束名> [CASCADE | RESTRICT]]
[alter column <列名> <数据类型>];
索引相关语句
create [unique] [cluster] index <索引名>
on <表名>(<列名> [<次序>] [, <列名> [<次序>]] ...);
alter index <旧索引名> rename to <新索引名>;
drop index <索引名>;
用户为基本表建立索引后,DBMS 会自动使用索引机制访问元组,具体的映射和访问方法无需用户关心。
元组操作语句
select [all | distinct] <目标列表达式> [, <目标列表达式>] ...
from <表名 | 视图名> [, <表名 | 视图名>] | (<select 语句>) [as] <别名>
[where <条件表达式>]
[group by <列名1> [having <条件表达式>]]
[order by <列名2> [asc | desc]];
insert into <表名> [(<属性列1> [, <属性列2>]...)]
values (<常量1> [, <常量2>]...);
insert into <表名> [(<属性列1> [, <属性列2>]...)]
<子查询>;
update <表名>
set <列名1> = <表达式1> [,<列名2> = <表达式2>]...
[where <条件>];
delete from <表名>
[where <条件>];
视图相关语句
create view <视图名> [(<列名> [, <列名>]...)]
as <子查询>
[with check option]
with check option 表示对视图进行操作时要满足视图定义中的子查询的谓词约束
注意,一个视图被定义时并未执行子查询语句,只有当其被访问时,才执行。
更新、查询视图的各个操作和查询基本表相同;注意,数据库管理系统会结合查询语句和视图定义将视图查询转化为基本表的查询来执行。
数据库的安全性
授权与收回(自主存取控制方法 DAC)
grant <权限> [, <权限>]...
on <对象类型> <对象名> [, <对象类型> <对象名>]...
to <用户> [, <用户>]...
[with grant option];
revoke <权限> [, <权限>]...
on <对象类型> <对象名> [, <对象类型> <对象名>]...
from <用户> [, <用户>]...
[cascade | restrict];
create user <用户名> [with] [dba | resource | connect];
- <权限> 一般为 <对象类型> 的操作名(select, update, delete, all privileges…)
- <对象类型> 可以是表、视图等
- with grant option 表示获得该权限组的用户可以将权限转授其他用户
- cascade 或 restrict 表示级联操作,即次第收回唯一从收回操作对象用户处得到该权限的用户的权限
权限 | create user | create schema | create table | 登录数据库,查询操作 |
---|---|---|---|---|
DBA | √ | √ | √ | √ |
RESOURCE | × | × | √ | √ |
CONNECT | × | × | × | √ |
角色——用户(自主存取控制方法 DAC)
create role <角色名>;
grant <角色1> [, <角色2>]...
to <角色3|用户1> [. <角色4|用户2>]...
[with admin option];
给角色授权和收回权限的语句与用户类似。
with admin option 表示获得某种角色权限的角色或用户还可以将这些权限转授其他角色。
数据库角色是一组权限的集合
强制存取控制方法(MAC)
敏感度标记
- 绝密:TS
- 机密:S
- 可信:C
- 公开:P
访问规则
- 仅当主体的许可证级别大于等于客体的密级时,才可读
- 仅当主体的许可证密级小于等于客体的密级时,才可写
其他安全机制
- 视图机制:控制数据对不同对象的可见范围
- 审计机制:将用户对数据库的操作记录下来存入日志
- 数据加密机制:存储加密,传输加密
数据库完整性
完整性分类
- 实体完整性:主码唯一且主码中没有属性为空
- 参照完整性:外码参照的主码数据应当存在,外码与本关系的主码没有交集时,可以接受空值
- 用户定义的完整性:
- 属性约束条件
- 约束条件的检查和违约处理
断言
create assertion <断言名> <check 子句>;
drop assertion <断言名>;
任何对断言涉及的关系的操作都会触发 DBMS 检查断言,为假则拒绝执行。
check 子句中约束条件和 where 子句中的类似。
触发器
create trigger <触发器名>
{before | after} <触发事件> on <表名>
referencing newrow|oldrow as <变量>
for each {row | statement}
[when <触发条件>] <触发动作>;
drop trigger <触发器名> on <表名>
- <触发事件> 为一些操作名(insert, update…),也可以指定列(insert of <列, …>)
- row 代表行触发器,对应操作每操作一行触发一次,statement表示语句触发器,执行一条指令触发一次
- when <触发条件> 缺省时默认为真
- 运行顺序:before类触发器 –> sql语句 –> after类触发器
- 对同一个表上的多个 before(after) 类触发器,先创建的先运行