关系模式:对关系的描述(表头、对表的描述)
关系:一张二维表
查询 插入 删除 修改
查询又分为
其中基本操作为:选择、投影、并、差、笛卡尔积
实体完整性:主码唯一且不能为空
参照完整性:外码要么为空,要么对应另一个表的主码
用户定义的完整性:自己定义的完整性(如数据范围要求)
数据查询:SELECT(P88)
数据定义:CREATE DROP ALTER
数据操作:INSERT UPDATE DELETE(P113)
数据控制:GRANT REVOKE(见第四章)
使用方法和例子见书
非授权用户对数据库的恶意存取和破坏
数据库中重要或敏感的数据被泄露
安全环境的脆弱性
用户身份鉴别:口令、身份特征
存取控制
自主存取控制
强制存取控制
为不同的用户定义不同的视图,把不需要的数据给隐藏起来,这样用户就不会进行误操作。
把对数据库的所有操作都记录到审计日志中,然后就可以通过日志审查这个里面是否有一些非法行为。
1.GRANT
GRANT <权限>[,权限]···
ON <对象类型><对象名>[,<对象类型><对象名>]···
TO <用户>[,<用户>]···
[WITH GRANT OPTION]
如果指定了WITH GRANT OPTION子句,则获得某种权限的用户还可以把这种权限再授予其他的用户
2.REVOKE
REVOKE<权限>[,<权限>]···
ON <对象类型><对象名>[,<对象类型><对象名>]···
FROM <用户>[,<用户>]···[CASCADE|RESTRICT]
角色(教室、家长、学生…表示一类人)→用户
4.7.1 角色的创建
CREATE ROLE <角色名>
4.7.2 给角色授权
GRANT <权限>[,<权限>]···
ON <对象类型>对象名
TO <角色>[,<角色>]···
3.将一个角色授予其他的角色和用户
GRANT <角色1>[,<角色2>]···
TO <角色3>[,<用户1>]···
[WITH ADMIN OPTION]
如果指定了WITH ADMIN OPTION子句,则获得某种权限的角色或用户还可以把这种权限再授予其他的角色
4.角色权限的收回
REVOKE <权限>[,<权限>]···
ON <对象类型><对象名>
FROM <角色>[,<角色>]···
数据库的完整性包括正确性及相容性
定义:符合现实世界语义、反映当前实际情况的
定义:数据库同一对象在不同关系表中的数据是符合逻辑的
1、提供定义完整性约束条件的机制
2、提供完整性检查的方法
3、进行违约处理
实体完整性:主码唯一且不能为空
参照完整性:外码要么为空,要么对应另一个表的主码
用户定义的完整性:自己定义的完整性(如数据范围要求)
实现:创建时用check 或constraint进行完整性约束
CHECK <约束条件>
CONSTRAINT <约束名><约束条件>
函数依赖:
部分函数依赖、完全函数依赖、传递函数依赖
为什么要引入范式?
因为关系模式存在诸多问题:
超码:能推出所有属性的属性集
候选码:最小的超码,真子集不能再推出所有属性(可以有多个候选码集)
主码:挑选任意候选码中的一个(候选码中的某一个)
码:所有主码和候选码的简称(找候选码就行)
全码:所有的属性都可以是码(候选码/主码)
主属性:包含在任意一个候选码中的属性
非主属性:不包含在候选码中的属性
表中无表
在1NF的基础上,没有非主属性对于码的部分依赖
即:不存在→有多个码可以推出某非主属性
在2NF的基础上,没有非主属性对于码的传递函数依赖
即:不存在→某个码可以通过传递方式重复地推出某非主属性
例如:
学号->班级号 学号->班级名
班级号->班级名
拆成R1(学号,姓名,班级号);R2(班级号,班级名)
全码一定是3NF(因为没有非主属性)
在3NF的基础上,没有主属性对码的部分 和传递函数依赖
注意:之前是非主属性,这里是主属性
矩形表示实体
椭圆表示属性
菱形表示联系
联系:
1对1:转换为主码
1对n:转换为外码
m对n:转换为一张表
处理过程:
嵌入式SQL与主语言的通信:
主变量: 主语言程序变量
游标: 一个缓冲区,用于存放SQL的执行结果
不用游标的SQL语句: 说明性语句、数据定义语句、数据控制语句、查询结果为单记录的SELECT语句
使用游标的SQL语句: 查询结果为多条记录的SELECT语句
动态SQL: 执行的时候才确定SQL子句
过程化SQL程序的基本结构是块
过程化SQL的基本语句
存储过程: 没有返回值
函数: 有返回值
原子性(atom)、一致性(consistent)、隔离性(isolate)、持久性(duration)
故障的种类:
数据转储: 对失败的事务重新执行
日志文件: 记录事务对数据更新操作的文件