数据库基础部分知识点总结

绪论

  • 数据,数据库,数据库管理系统,数据库系统
  • 两类数据模型:概念模型,逻辑模型和物理模型
    • 数据模型三要素:数据结构,数据操作,数据的完整性约束条件
    • 逻辑模型:
      • 层次模型:类似树;结构简单清晰,查询效率高,良好的完整性支持;但易产生冗余数据,且对很多联系不适用
      • 网状模型:允许结点无双亲,允许结点有多个双亲;能够更直接描述现实世界,存取效率高;但结构复杂
      • 关系模型:实体及实体间的联系都用关系表示;结构简单易懂,建立在严格的数学概念基础上,存取路径对用户透明;但查询效率不如格式化模型
  • 数据库系统的结构:三级模式两级映像
    • 外模式:数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述
    • 模式:全体数据的逻辑结构和特征的描述
    • 内模式:数据物理结构和存储方式的描述
    • 外模式/模式映像(实现逻辑独立):一个模式可以有多个外模式,对于每一个外模式,数据库系统都有一个外模式/模式映像。当模式改变时,DBA对各映像作出相应改变使外模式保持不变,保持数据与程序的逻辑独立性。
    • 模式/内模式映像(实现物理独立):唯一的,定义了数据全局逻辑结构与存储结构之间的对应关系。当数据库的存储结构改变时,DBA对模式/内模式映像作出改变使模式保持不变,保持数据与程序的物理独立性。
  • DBA职责:
    • 决定数据库中的信息内容和结构
    • 决定数据库的存储结构和存取策略
    • 定义数据库的安全性要求和完整性约束条件
    • 监控数据库的使用和运行
    • 数据库的改进和重组、重构
    • 数据库的备份和恢复

关系数据库

  • 关系操作:插入,查询,删除,修改
    • 查询:
      • 选择:δF®,F表示选择条件,R为关系
      • 投影:ΠA®,A为R中的属性列,投影后的结果取消了重复的行
      • :R∪S
      • :R-S={t|t in R ∩ t notin S}
      • 笛卡尔积:R×S={tr,ts|tr∈R∩ts∈S}
      • 交:R∩S
      • 连接:R∞S(AθB),从R和S的笛卡尔积中选取R的A属性与S的B属性上的值满足比较关系θ的元组
        • 等值连接:R∞S(A=B)
        • 自然连接:R∞S,特殊的等值连接,要求A,B的属性名相同,结果中会去掉重复列
        • 外连接:保留悬浮元组,其他属性填入空值
      • 除:R÷S,元组在X上分量值x的象集Yx包含S在Y上的投影的集合
  • 关系的完整性:
    • 实体完整性:主键不能为空
    • 参照完整性:不允许引用不存在的实体(或为空或为被参照关系中某元组的主键)
      • 参照关系与被参照关系可以是同一个关系
    • 用户定义的完整性:某一具体应用所涉及的数据必须满足的语义要求

SQL

  • 集DDL,DML,DCL于一体,高度非过程化,面向集合的操作方式
  • DDL:
    • 模式:
      • CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
      • DROP SCHEMA <模式名> <CASCADE|RESTRICT>
        • CASCADE:删除模式时同时把模式中所有数据库对象全部删除
        • RESTRICT:如果模式中已经定义了下属的数据库对象,则拒绝删除
      • 不提供修改模式定义的操作,只能删除重建
    • 表:
      • CREATE TABLE <表名> (<列名><数据类型>[列级完整性约束条件]...[,表级完整性约束条件])
      • ALTER TABLE <表名>
        • [ADD [COLUMN] <列名><数据类型>[完整性约束]]
        • [ADD <表级完整性约束>]
        • [DROP [COLUMN] <列名>[CASCADE|RESTRICT]]
        • [DROP CONSTRAINT <完整性约束名> [RESTRICT|CASCADE]]
        • [ALTER COLUMN <列名><数据类型>]
      • DROP TABLE <表名> [RESTRICT|CASCADE] 默认RESTRICT
    • 索引:加快查找速度
      • 常见索引:
        • 顺序文件上的索引:按指定属性值升序或降序存储的关系
        • hash索引
        • B+树索引:动态平衡,叶结点为属性值
        • 位图索引
      • 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.使用索引查询不一定能提高查询性能。(适用一般查询返回结果集小于表中记录的10%)
      • CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>]...)
    • 数据字典:系统内部的一组系统表,记录了数据库中所有的定义信息
  • 数据查询:
    • DISTINCT:消除取值重复的行
    • 字符匹配:%任意长度,_单个字符,‘_’ ESCAPE ‘’,转义为普通的下划线字符
    • 聚集函数:COUNT,SUM,AVG,MAX,MIN。除了count(*)外别的函数都不处理空值
      • where子句的作用对象为基本表或视图,having短语作用于组,所以where子句不能用聚集函数作为条件表达式,只能用having
    • 连接查询:
      • 自身连接:为表取别名
      • 外连接:left/right outer join
    • 嵌套查询:不能使用order by子句,order by只能对最终查询结果排序
    • EXISTS:带有EXISTS的子查询不返回任何数据,只产生逻辑真值或假值,可以用来判断x∈R非空是否成立
      • eg.:select name from student where exists (select* from SC where Sno=studen.Sno and Cno=‘1’)
    • 集合查询(操作对象是元组的集合,各结果的列数和列名必须相同)
      • 并操作:UNION
      • 交操作:INTERSECT
      • 差操作:EXCEPT
    • 派生表:必须指定别名
  • 数据更新:
    • 插入:INSERT INTO <表名> [(<列名>,...)] VALUES (<常量1>,...)
    • 修改:UPDATE <表名> SET <列名>=<表达式>,... [WHERE...]
    • 删除:DELETE FROM <表名> [WHERE...]
  • 视图:
    • 创建视图:CREATE VIEW <视图名> [<列名>,...] AS <子查询> [WITH CHECK OPTION]
      • WITH CHECK OPTION:对视图进行update,insert,delete等操作时仍满足子查询中的条件表达式
      • 视图的属性列名要么全部省略,要么全部指定
      • 行列子集视图:单个基本表导出,包含主键,无虚拟列
      • 虚拟列:基本表中不存在的派生属性
      • 带表达式的视图:带虚拟列的视图
      • 分组视图:带有聚集函数和group by子句的查询定义的视图
    • 删除视图:DROP VIEW <视图名> [CASCADE]
      • 如果该试图上还导出了其他视图,一并删除
    • 视图查询:
      • 视图消解:执行对视图的查询时,先检查其有效性(查询涉及的表和视图是否存在),若存在,从数据字典中取出对视图的定义,然后将定义中的子查询和用户的查询结合起来,转换为对基本表的查询
      • 对视图与派生表的查询的区别:视图一旦定义,将永久保存在数据字典中,之后的所有查询都可以引用该视图;派生表只是在语句执行时临时定义,语句执行后该定义立即被删除
    • 更新视图:
      • 与查询类似,通过视图消解转化为对基本表的更新操作
    • 视图的作用:
      1. 简化用户的操作
      2. 使用户以多种视角看待同一数据
      3. 对重构数据库提供了一定程度的逻辑独立性
      4. 对机密数据提供安全保护
      5. 适当利用视图可以更清晰地表达查询

数据库安全性

  • 数据库安全性控制
    • 用户身份鉴别
      • 静态口令鉴别:密码,容易被攻击,安全性低
      • 动态口令鉴别:如短信密码,安全性相对提高
      • 生物特征鉴别
      • 智能卡鉴别
    • 存取控制
      • 定义用户权限,并将用户权限存储到数据字典
      • 合法权限检查:每当用户发起存取数据库的操作请求时,数据库管理系统查找数据字典,根据安全规则进行合法权限检查,若用户请求超出定义权限,拒绝操作
    • 自主存取控制(SQL支持):用户对不同的数据库有不同的存取权限,不同的用户对同一数据库也有不同权限,权限可以转授,非常灵活
      • 用户权限由数据库对象和操作类型组成
      • 在非关系型数据库中,仅限于数据本身;而在关系型数据库中,存取控制的数据库对象不仅有数据本身,还有数据库模式(模式、基本表、视图、索引的创建等)
      • 授予:GRANT <权限> ON <对象类型> <对象名> TO <用户名> [WITH GRANT OPTION]
        • WITH GRANT OPTION:允许将自身权限或子集转授给其他用户,但不能循环授权
        • eg.把查询Student表和修改学号的权限授权给用户U4,允许转授
          • GRANT SELECT,UPDATE(Sno) ON TABLE Student TO U4 WITH GRANT OPTION;
      • 收回:REVOKE <权限> ON <对象类型> <对象名> FROM <用户名> [CASCADE|RESTRICT]
      • 对数据库模式对象的授权由DBA在创建用户时实现
        • CREATE USER <username> [WITH] [DBA|RESOURCE|CONNECT]
        • 只有超级用户(DBA)才有权创建新用户
        • 新用户默认权限为CONNECT,不能创建新用户,不能创建模式,不能创建基本表,只能登录数据库
        • RESOURCE权限的用户可以创建基本表和视图,不能创建模式和新用户
      • 角色:被命名的一组与数据库操作相关的权限的集合。可以为一组具有相同权限的用户创建一个角色,使用角色管理权限,简化过程。
        • 创建角色:CREATE ROLE <角色名>
        • 角色授权:GRANT <权限> ON <对象类型> <对象名> TO <角色>
        • 转授给其他角色:GRANT <角色1> TO <角色2> [WITH ADMIN OPTION] 一个角色包含的权限包括直接授予这个角色的全部权限加上其他角色授予的全部权限
        • 权限收回:REVOKE <权限> ON <对象类型> <对象名> FROM <角色>
    • 强制存取控制方法:
      • 实体:系统中的活动实体,包括DBMS管理的实际用户和代表用户的各进程
      • 客体:系统中的被动实体,包括文件、基本表、索引、视图等
      • DBMS为每个主体和客体的实例指派一个敏感度标记(绝密top secret>=机密secret>=可信confidential>=公开public),主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级
      • 仅当主体的许可证级别大于等于客体的密级时,主体才能读取相应的客体
      • 仅当主体的许可证级别小于等于客体的密级时,主体才能写相应客体(若违反,有可能把数据的密级从高流向低,造成数据的泄露)
    • 自助存取控制与强制存取控制共同构成数据库管理系统的安全机制
  • 视图机制:为不同的用户定义不同的视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来
  • 审计:把用户对数据库的所有操作自动记录下来放入审计日志中。审计员利用审计日志监控数据库中的各种行为。
    • 可审计事件
      • 服务器事件:如数据库服务器启动,停止,配置文件重新加载等
      • 系统权限:对系统拥有的结构或模式对象进行操作的审计
      • 语句事件:对SQL语句(DDL,DML,DQL,DCL)的审计
      • 模式对象事件:对特定模式对象上进行的select或DML操作的审计
        • 模式对象:表、视图、存储过程、函数等(不包括依附于表的索引、约束、触发器)
    • 审计功能:基本功能,多套审计规则(数据库初始化时设定),审计分析和报表,审计日志必须先转储后删除,且只允许审计员查阅,系统提供查询审计设置和记录信息的专门视图
    • AUDIT 设置审计功能;NOAUDIT取消审计功能
      • 用户级审计:用户对自己创建的数据库表或视图进行审计
      • 系统级审计:DBA设置的用以监测登录、授权、收回等操作的审计
  • 数据加密
    • 存储加密
      • 透明:写到磁盘时加密,系统自动
      • 非透明:多个加密函数
    • 传输加密
      • 链路加密:链路层,报文和报头都加密,中间节点需要密码设备
      • 端到端加密:只加密报文,发送端加密,接收端解密
  • 其他
    • 推理控制
    • 隐蔽信道
    • 数据隐私保护

数据库完整性

  • 数据库完整性指数据的正确性和相容性。为维护数据库完整性,DBMS必须实现:
    1. 提供定义完整性约束条件的机制
    2. 提供完整性检查的方法
    3. 进行违约处理
  • 实体完整性
    • 定义:在CREATE TABLE时用PRIMARY KEY定义(单个主键表级or列级,多个主键表级)
    • 检查和违约处理:用户对基本表插入or更新时,DBMS将自动进行检查:
      • 主键是否唯一,不唯一拒绝操作
      • 主键的各个属性是否为空,有一个为空就拒绝操作
      • 检查主键时全表扫描非常耗时,DBMS一般在主键上自动建立索引
  • 参照完整性
    • 定义:在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外键,用REFERENCES短语指明外键参照哪些表的主键
      • FOREIGN KEY (Sno) REFERENCES Student(Sno)
    • 检查和违约处理
      • 当参照表执行插入、更新等操作破坏参照完整性时,拒绝操作
      • 当被参照表执行更新、删除等操作破坏参照完整性时,拒绝(default)/级联/设置为空值(外键为主键时不能置空)
  • 用户定义的完整性
    • 属性上的约束条件
      • 定义:NOT NULL,UNIQUE,CHECK(条件表达式)
      • 检查和违约处理:不满足则拒绝执行
    • 元组上的约束条件
      • 定义:CHECK(条件表达式),元组级的限制可以设置不同属性之间的相互约束条件
        • eg.当学生性别是男时,名字不能以Ms.开头:CHECK(Ssex=‘女’ OR Sname NOT LIKE ‘Ms.%’)
      • 检查和违约条件:拒绝执行
  • 完整性约束命名子句:用来对完整性约束条件命名,从而可以灵活增加、删除一个完整性约束条件
    • CONSTRAINT <完整性约束条件名> <完整性约束条件>
    • 域中的完整性限制
      • eg.CREATE DOMAIN GenderDomain CHAR(2) CHECK(VALUE IN ('男','女'))
        CREATE DOMAIN GenderDomain CHAR(2) CONSTRAINT GD CHECK(VALUE IN ('男','女'))
  • 断言:通过声明断言来指定更具一般性的约束,可以定义涉及多个表或聚集操作的比较复杂的完整性约束
    • 定义:CREATE ASSERTION <断言名> <CHECK 子句>
      • eg.限制数据库课程最多60名学生选修:
           CREATE ASSERTION ASSE_DB_NUM CHECK(60>=(SELECT count(*) 
           FROM Course,SC 
           WHERE Course.Cno=SC.Cno AND Course.Cname='数据库'))
        
        每在SC表中插入一条元组,ASSE_DB_NUM断言被触发检查,若超过60人,将拒绝操作
  • 触发器:用户定义在关系表上的一类由事件驱动的特殊过程。
    • 定义触发器:触发器又叫事件-条件-动作规则–当特定系统事件发生时,对规则的条件进行检查,如果条件成立则执行规则中的动作。
         CREATE TRIGGER <触发器名> 
         {BEFORE|AFTER} <触发事件> ON <表名>
         REFERENCING OLD|NEW ROW AS <变量名>
         FOR EACH {ROW|STATEMENT}
         [WHEN <触发条件>] <触发动作体>
      
      • 只有创建表的用户才可以在表上创建触发器
      • 触发器只能定义在基本表上
      • 行级触发器(FOR EACH ROW):触发事件影响到几行记录,就执行几次触发器。可以用NEWROW和OLDROW引用UPDATE|INSERT事件前后的值
      • 语句级触发器(FOR EACH STATEMENT):触发事件执行前或者是执行之后执行一次
      • 若省略WHEN,触发动作体在触发器激活后立即执行
      • eg.创建一个trig_book触发器,该触发器在表t_book插入一条数据后,对表t_bookType的bookNum数量对应的bookTypeId会自动加1
        CREATE TRIGGER trig_book
        AFTER INSERT ON t_book
        FOR EACH ROW
        UPDATE t_bookType SET bookNum = bookNum+1 WHERE new.bookTypeId = t_booktype.id;
        
    • 激活触发器:一个表上可能定义了多个触发器,激活顺序如下
      1. 执行该表上的BEFORE触发器
      2. 激活触发器的SQL语句
      3. 执行该表上的AFTER触发器
      • 对于多个BEFORE或AFTER触发器,遵循谁先创建谁先执行的原则
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值