数据库系统系统考前复习

绪论

数据库系统概述

  • 数据库的四个基本概念:数据、数据库、数据库管理系统、数据库系统
  • 数据管理的三个阶段:人工管理阶段、文件系统阶段、数据库系统阶段

数据模型

  • 数据模型是对现实世界数据特征的抽象

  • 两类数据模型:概念模型(按照用户的观点对数据和信息建模)、逻辑模型(网状、层次、关系模型等。按照计算机系统的观点对数据建模,用于DBMS实现)和物理模型(描述数据在磁盘上的表示方法和存取方法)

  • 信息世界的基本概念:实体、属性、码、实体型、实体集、联系。

  • 概念模型可用E-R图来描述现实世界。

  • 数据模型由三部分组成:数据结构(描述系统的静态特性)、数据操作(描述系统的动态特性)、完整性约束。

  • 数据操作:对数据库中各种元素的实例允许执行的操作的集合

  • 数据操作的类型:查询、更新(插入、删除和修改)

  • 常用的数据模型:层次模型、网状模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型、非结构化数据模型、图模型

  • 层次模型用树形结构来表示各类实体以及实体间的联系(有且只有一个结点没有双亲结点,这个结点称为根结点,其他结点有且仅有一个双亲结点)

  • 网状模型用网状结构来表示各类实体以及实体间的联系(允许一个以上的结点无双亲,一个结点可以有多于一个的双亲)

  • 关系数据库系统采用关系模型作为数据组织的方式

数据库系统的结构和组成

  • 数据库系统的三级模式结构:外模式、模式、内模式
  • 模式(也称逻辑模式):数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
  • 外模式(也称子模式或用户模式):是模式的子集,一个模式可以有多个外模式,反映了不同用户的应用需求。一个外模式可以被多个应用使用,一个应用只能使用一个外模式。
  • 内模式(也称储存模式):是数据物理结构和储存方式的描述,一个数据库只能有一个内模式。
  • 数据库、数据库管理系统、应用程序、数据库管理员

关系数据库

关系模型

  • 关系模式是型,关系是值
  • 关系模式可以定义为$R(U, D, DOM, F)$,$R$为关系名,$U$为组成该关系的属性名集合,$D$为U中属性所来自的域,$DOM$为属性向域的映像集合,$F$为属性间数据的依赖关系的集合。
  • 在一个给定的应用领域中,所有关系的集合构成一个关系数据库
  • 关系的三类完整性约束:实体完整性、参照完整性和用户定义的完整性
  • 实体完整性:关系的主属性不能取空值
  • 参照完整性:外码要不取空值,要不取相对应参照关系中存在的主码值。

关系代数与演算

  • 关系数据库语言的分类:关系代数语言、关系演算语言、具有关系代数和关系演算双重特点的语言(SQL)
  • 关系代数是一种抽象的查询语言,他用对关系的运算来表达查询
  • 关系运算:选择、投影、连接、除运算
  • 以数理逻辑中的谓词演算为基础,按照谓词变元不同分为元组关系演算和域关系演算

关系数据库标准语言SQL

数据定义

  • 模式定义(CREATE SCHEMA、DROP SCHEMA)
  • 表定义(CREATE TABLE、DROP TABLE、ALTER TABLE)
  • 索引定义(CREATE INDEX、ALTER INDEX、DROP )
  • 视图定义

数据查询

单表查询

  • 语法:
    SELECT [DISTINCT] <列名>
    FROM <表名1> [WHERE <表名2>]
    [GROUP BY <表达式> [HAVING <表达式>]]
    [ORDER BY <> [ASC|DESC]]
  • BETWEEN …. AND ….
  • IN … , NOT IN …
  • LIKE ‘<匹配字符串>’(通配符)
  • IS NULL,IS NOT NULL
  • 聚集函数:COUNT()、SUM()、AVG()、MAX()、MIN()

连接查询

  • 等值连接:”=”
    SELECT Student.*, SC.*
    FROM Student, SC
    WHERE Student.Sno = SC.Sno
  • 自身连接:
    SELECT First.Cname, Second.Cname
    FROM Course First, Course Second
    Where First.Cpno = Second.Cpno
  • 外连接:
    SELECT Student.Sno
    FROM Student LEFT OUT JOIN SC ON
    (Student.Sno = SC.Sno)
  • 多表连接:
    SELECT Student.Sno
    FROM Student, SC, Course
    WHERE Student.Sno = SC.Sno
    AND SC.Cno=Course.Cno

嵌套查询

  • 一个SELECT-FROM-WHERE语句被称为一个查询块,将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。
    SELECT Sname
    FROM Student
    WHERE Sno IN
    (
    SELECT SNO
    FROM SC
    WHERE Cno=’2’
    )
  • 上层的查询块称为外层查询或父查询
  • 下层的查询块称为内层查询或子查询
  • 子查询的限制:不能使用GROUP BY
  • 使用ANY或者ALL谓词时必须同时使用比较运算
  • EXIST谓词不返回任何数据,只返回TRUE或者False

集合查询

  • 集合操作的种类:UNION、INTERSECT、EXCEPT
  • 参加集合操作的各查询结果的列数必须相同,对应项的数据类型也必须相同
  • UNION:将多个查询结果合并起来时,自动去掉重复元组
  • UNION ALL:将多个查询结果合并起来时,保留重复元组

数据更新

数据插入

  • 两种插入数据方式:插入元组、插入子查询结果
  • 插入元组语句格式:
    INSERT
    INTO <表名> [(<属性列1>[,<属性列2>])]
    VALUES (<常量1>[,<常量2>])
  • 插入子查询语句格式:
    INSERT
    INTO <表名> [(<属性列1>[,<属性列2>])]
    子查询

修改数据

  • 语句格式
    UPDATE <表名>
    SET <列名>=<表达式>[,<列名>=<表达式>…]
    [WHERE <条件>]
  • 关系数据库管理系统在执行修改语句时会检查修改操作是否破坏表上已定义的完整性规则

删除数据

  • 语句格式
    DELETE FROM <表名>
    [WHERE <条件>]

空值处理

  • 用IS NULL或者IS NOT NULL来判断空值
  • 有NOT NULL约束的、加了UNIQUE限制的、码属性不能取空值
  • 空值与另一个值得运算结果为空值
  • 空值与另一个值得比较结果为UNKONW

视图

  • 视图是从一个或者几个基本表中导出的虚表,只存放定义,不存放数据,基表中的数据发生变化视图中的数据也随之发生变化
  • 建立视图:
    CREATE VIEW <视图名>
    AS <子查询>
    [WITH CHECK OPTION]
  • 删除视图:
    DROP VIEW <视图名> [CASCADE]

数据库安全性

数据库安全性控制

  • 数据库安全性控制的常用方法:用户身份鉴别(用户名密码)、存取控制(权限,GRANT、REVOKE)、视图(把保密数据对无权存取这些数据的用户隐藏)、审计、数据加密(储存加密、传输加密)

数据库完整性

实体完整性

  • 通过PRIMARY KEY定义
  • 为加快索引速度,对主码进行B+树索引

参照完整性

  • 外码只能是空值或者对应主码中某个已经存在的值
  • 参照完整性违约处理:拒绝(默认策略)、级联操作、设置为空值

用户定义完整性

  • 针对某一应用的数据必须满足的语义要求
  • 两种约束:属性上的约束条件(NOT NULL、UNIQUE、CHECK)、元组上的约束条件(CHECK)

完整性约束命名子句

  • CONSTRANT <完整性约束名> <完整性约束条件>
  • 完整性约束条件包括NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK等

断言

  • CREATE ASSERTION:断言不为真的操作拒绝执行

触发器

  • CREATE TRIGGER
  • 触发器有触发时间触发,并由数据库服务器自动执行
  • 一个数据表上可能定义了多个触发器,遵循下面顺序执行:执行该表上的BEFORE触发器、激活触发器的SQL语句、执行该表上的AFTER触发器。

数据库系统系统考前复习

http://example.com/2021/10/16/DBMS/

Author

Peizheng Wang

Posted on

2021-10-16

Updated on

2024-06-25

Licensed under

Kommentare

You forgot to set the shortname for Disqus. Please set it in _config.yml.