第1章 数据库系统世界

数据库(DB)

  • 从本质上讲数据库就是信息的集合。
  • 一般来说,数据库是指数据库管理系统(DBMS)管理的数据集合。

数据库管理系统(DBMS)

  • 数据定义语言(DDL)
  • 数据查询和操纵语言(DML)
  • 支持大容量数据的长期存储
  • 具有持久性
  • 支持数据共享

数据库系统(DMS)

数据库系统通常由软件、数据库和数据管理员组成。

  • 数据库(DB)
  • 数据库管理系统(DBMS)
  • 数据库管理员(DBA)
  • 数据库应用程序(APP)

数据库设计步骤

  • 需求收集和分析
  • 概念结构设计
  • 逻辑结构设计
  • 物理结构设计
  • 物理实现
  • 数据库运行和维护

第2章 关系数据模型

关系模型基础

数据模型

  • 数据结构
  • 数据操作
  • 数据上的约束

常用的数据模型:层次模型、网状模型、关系模型。

关系:数据以一张二维表格描述。

属性:关系的列,是关系特征的描述。

模式:关系名和其属性的集合。例如movies(title, year, length, genre)。

元组:除属性行外,关系的每一行对应一个元组。例如(红海行动, 2018, 138, 动作)。

:属性的数据类型即取值范围。

关系的性质

  • 不能出现相同的行
  • 不能出现相同的列名
  • 列是不可分割的最小数据项
  • 可以交换任意两行的顺序
  • 可以交换任意两列的顺序
  • 每一列的数据类型、取值范围必须一致

关系的操作

  • 关系代数的操作对象是关系
  • 关系代数的操作
    • 并、交、差
    • 选择、投影
    • 重命名

R∪S:属于R或属于S的所有元组构成的新关系。R∩S:属于R也属于S的所有元组构成的新关系。R−S:属于R且不属于S的所有元组构成的新关系。R \cup S:属于R或属于S的所有元组构成的新关系。\\ R \cap S:属于R也属于S的所有元组构成的新关系。\\ R-S:属于R且不属于S的所有元组构成的新关系。 R∪S:属于R或属于S的所有元组构成的新关系。R∩S:属于R也属于S的所有元组构成的新关系。R−S:属于R且不属于S的所有元组构成的新关系。

投影运算
πA1A2...An(R):从关系R中取出A1A2...An列生成一个新的关系。例:πtitle,year,studioName(Movies1)\pi_{A_1A_2...A_n}(R):从关系R中取出A_1A_2...A_n列生成一个新的关系。\\ 例:\pi_{title, year, studioName}(Movies1) πA1​A2​...An​​(R):从关系R中取出A1​A2​...An​列生成一个新的关系。例:πtitle,year,studioName​(Movies1)
选择运算
σc(R):从关系R中取出满足条件c的元组生成一个新的关系。例:σlength>100(Movies1)σc(R)中表达式c可以使用的运算符:比较运算符:<,≤,>,≥,=,≠逻辑运算符:!,or,and(非、或、与)\sigma_c(R):从关系R中取出满足条件c的元组生成一个新的关系。\\ 例:\sigma_{length>100}(Movies1)\\ \sigma_c(R)中表达式c可以使用的运算符:\\ 比较运算符:\lt, \le, \gt, \ge, =, \ne 逻辑运算符:!, or, and(非、或、与) σc​(R):从关系R中取出满足条件c的元组生成一个新的关系。例:σlength>100​(Movies1)σc​(R)中表达式c可以使用的运算符:比较运算符:<,≤,>,≥,=,​=逻辑运算符:!,or,and(非、或、与)
选择和投影的组合运算

例:查询2019年以前拍的动作片的片名和年份。
πtitle,year(σyear<2019andgenre=′动作′(Movies1))\pi_{title, year}(\sigma_{year\lt2019 \, and \, genre='动作'}(Movies1)) πtitle,year​(σyear<2019andgenre=′动作′​(Movies1))

关系的重命名
ρs(R):命名后的关系S与R有完全相同的元组,属性名也相同,只是关系的名称变为S。ρs(A1,A2,...An)(R):命名后的关系S与R有完全相同的元组,不仅关系的名称变为S,关系R中的属性在S中也依次改名为A1,A2,...,An。\rho_s(R):命名后的关系S与R有完全相同的元组,属性名也相同,只是关系的名称变为S。\\ \rho_s(A1,A2,...An)(R):命名后的关系S与R有完全相同的元组,不仅关系的名称变为S,关系R中的属性在S中也依次改名为A_1,A_2,...,A_n。 ρs​(R):命名后的关系S与R有完全相同的元组,属性名也相同,只是关系的名称变为S。ρs​(A1,A2,...An)(R):命名后的关系S与R有完全相同的元组,不仅关系的名称变为S,关系R中的属性在S中也依次改名为A1​,A2​,...,An​。

第3章 关系数据库设计理论

BC范式

关系R是BCNF的充要条件:每个非平凡FD的左边必定是超键。

任意一个二元关系是BCNF。

分解BCNF的方法:

  1. 找到R中任意一个BCNF违例FD

    A -> B

    设A = {A1A2…An}

    B = {B1B2…Bn}

    C = {C1C2…Cn}

    计算违例左边属性集的闭包:{A}+ = {A, B, C},其中C是推导出的属性集。

  2. 将关系R分解成两个关系:

    R1(A, B, C),即A闭包中的所有属性

    R2(A, R中除A, B, C之外的所有属性)

  3. 对R1和R2重复(1)、(2)的步骤,直到分解出来的所有关系均没有违例

例:关系R(A, B, C, D, E),含有FD:AB -> C,DE -> C 和 B->D。

判断关系R是否BCNF,如果不是,请分解成一系列BCNF关系集合。

从违例AB -> C开始分析:

  1. 确定键,通过求元素的闭包,得到键{ABE}

  2. 找出一个违例 AB -> C,计算{AB}+ = {ABCD}

  3. 将关系R分解为R1 (A,B,C,D) 和 R2 (A,B,E)

  4. 对R1和R2重复上述步骤

    R1的键是{AB},存在违例B -> D,将关系R1分解成R11(B, D),R12(B,A,C),R11和R12都是BCNF。

    R2的键是{ABE},R2是BCNF。

    所以,可以将关系R分解为R11(B,D),R12(B,A,C)和R2(A,B,E)三个关系。

从违例DE->C开始分析:

  1. 确定键,通过求元素的闭包,得到键{ABE}

  2. 分析违例DE -> C,计算{DE}+ = {DEC}

  3. 将关系R分解为R1(D,E,C)和R2(D,E,A,B)

  4. 对R1和R2重复上述步骤

    R1(D,E,C)的键是{DE},不存在违例,R1是BCNF。

    R2(D,E,A,B),{ABE}是键,B->D是违例,将R2分解为R21(B,D)、R22(B,A,E),{BAE}是键,R22是BCNF。

    所以,可以将关系R分解为R21(B,D),R22(B,A,E)和R1(D,E,C)三个关系。

3NF

条件:对于关系R上的任一非平凡FD:A -> B。满足A是超键或B由主属性组成(候选键中的属性统称为主属性),称关系R满足第三范式。

3NF与BCNF

  • 关系R若满足BCNF也一定满足3NF
  • 关系R若满足3NF不一定满足BCNF
  • BCNF是基于函数依赖的最高范式,但不是数据库模式设计的最高范式

第4章 高级数据库模型

E/R模型

三要素

  • 实体集
  • 属性
  • 联系

第5章 代数和逻辑查询语言

第6章 数据库语言SQL

在SQL中定义关系模式

使用CREATE TABLE定义关系模式

数据类型 长度 取值范围
NCHAR(n) 定长字符串,字符串长度规定为n 最多4000字符,个数由n决定
NVARCHAR(n) 由字符串实际长度决定最多不超过n个字符 最多4000字符,个数由n决定
NTEXT 存放文本,长度由字符实际个数决定 最多230-1个字符
INT 4字节 -230~231-1
SMALLINT 2字节 -215~215-1
BIT 1字节 1或0
DATETIME 8字节 1753-01-01~9999-12-31
SMALLDATETIME 4字节 1900-01-01~2079-06-06
FLOAT 8字节 表示近似的浮点数值
DECIMAL(n,m) 允许n位十进制数,小数部分占m位 表示精确的浮点数值
NUMERIC(n,m) 同上 同上
CREATE TABLE Movies (id INT IDENTITY(1,1)title NCHAR(50),year INT,length INT,genre NCHAR(10),studioName NVARCHAR(30),producerC# INT
);
CREATE TABLE Movies_1 (title NCHAR(50),date DATETIME,bookOffice DECIMAL(6,2),length INT,genre NCHAR(10),studioName NVARCHAR(30),producerC# INT
);

定义主键约束

  • 有多个主键时
CREATE TABLE Movies (title NCHAR(50),year INT,length INT,genre NCHAR(10),studioName NVARCHAR(30),producerC# INT,PRIMARY KEY(title, year)
);
  • 只有一个主键时
CREATE TABLE MovieStars (name NCHAR(30) PRIMARY KEY,address NVARCHAR(255),gender CHAR(1),birthdate DATETIME
);

定义唯一值约束

CREATE TABLE MovieStars(name NCHAR(30) PRIMARY KEY,address NVARCHAR(255) UNIQUE,gender CHAR(1),birthdate DATETIME
);

UNIQUE约束:在该列的取值必须唯一,但可以取空值。

PRIMARY KEY约束:在该列的取值必须唯一,不能取空值。

定义空值约束NULL

CREATE TABLE MovieStars(name NCHAR(30) PRIMARY KEY,address NVARCHAR(255) UNIQUE NOT NULL,gender CHAR(1),birthdate DATETIME
);

NULL约束:除了主键外,默认都是可以取空值的。

NOT NULL约束:表示该列不能取空值。

基于属性的CHECK约束

CREATE TABLE MovieStar(name NCHAR(30) PRIMARY KEY,address NVARCHAR(255) UNIQUE NOT NULL,gender CHAR(1) CHECK(gender in ('F', 'M')),birthdate DATETIME
);
CREATE TABLE MovieStars(name NCHAR(30) PRIMARY KEY,address NVARCHAR(255) UNIQUE NOT NULL,gender CHAR(1),birthdate DATETIME,CONSTRAINT gender_ck CHACK(gender in ('F', 'M'))
);

基于元组的CHECK约束

CREATE TABLE MovieStars(name NCHAR(30) PRIMARY KEY,address NVARCHAR(255),gender CHAR(1),birthdate DATETIME,CONSTRAINT gender_ck CHECK(gender='F' OR address IS NOT NULL)
);

设置默认值

CREATE TABLE MovieStars(name NCHAR(30) PRIMARY KEY,address NVARCHAR(255),gender CHAR(1) DEFAULT 'M',birthdate DATETIME DEFAULT '0000-00-00'
);

修改关系模式

DROP TABLE MovieStars
ALTER TABLE MovieStars ADD mobile NCHAR(11) DEFAULT 'unlisted';
ALTER TABLE MovieStars DROP mobile;

SQL中的简单查询

SELECT…FROM…WHERE

SELECT *
FROM Movies
WHERE studioName='Disney' AND year=2019

SQL中的投影

SELECT title, length
FROM Movies
WHERE studioName='Disney' AND year=2019

投影同时更改属性名

SELECT title AS name, length duration
FROM Movies
WHERE studioName='Disney' AND year=2019

用表达式取代属性

SELECT title name, length/60 lengthInHoues
FROM Movies
WHERE studioName='Disney' AND year=2019

用常量表达式取代属性

SELECT title name, length/60.0 lengthInHoues, 'hrs' inHours
FROM Movies
WHERE studioName='Disney' AND year=2019

查询1980年到1990年间出生的男演员。

SELECT name
FROM MovieStars
WHERE gender = 'M' AND birthdate BETWEEN '1980-01-01' AND '1990-12-31'

拷贝表 SELECT INTO 和 INSERT INTO SELECT的区别

第7章 约束与触发器

第8章 视图与索引

第9章 服务器环境下的SQL

附录 中英文词汇对照

中文 英文
key
超键 candidate key
主键 primary key
超键 superkeys
外键 foreign key
违例 violation
约束 constraint

第10章 关系数据库的新课题

第11章 半结构化数据模型

第12章 XML程序设计语言

数据库系统基础教程复习相关推荐

  1. 人机交互基础教程-复习总结

    人机交互基础教程 题型分布 考纲及重点 第 1 章 绪论 1.1 什么是人机交互 1.2 人机交互的研究内容(7个) 1.3 人机交互的发展历史(3阶段) 1.4 人机交互的应用 习题 第 2 章 感 ...

  2. 数据库系统基础教程第三版 部分实验命令

    本文为机械工业出版社 出版的<数据库系统基本教程(第三版)>一些课后习题的数据库操作命令. #创建产品数据库 create database products;#使用产品数据库 use p ...

  3. 大学计算机基础教程复习考试试题

    一.单项选择题(每题2分,共50分) 1.        计算机诞生于________. A.1941年                B.1946年                C.1949年   ...

  4. 大学一年级计算机教程视频教程,大学一年级公开课《计算机基础教程》期末试题复习.doc...

    大学一年级公开课<计算机基础教程>期末试题复习 1.在Windows启动后,要执行某个应用程序,下列方法中,___ D __是错误的. A.在资源管理器中,用鼠标双击应用程序名 B.利用& ...

  5. 2011计算机等级考试二级c语言公共基础教程.doc,2011年全国计算机等级考试二级c语言公共基础知识复习100题及答案.doc...

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp资格/认证考试&nbsp>&nbsp计算机等级考试 2011年全国计算机等级考试二级c语言公 ...

  6. 高等学校计算机专业教材精选计算机基础,大学计算机基础教程/高等学校计算机基础教育教材精选简介,目录书摘...

    编辑推荐: (1)内容丰富,包括计算机基础知识.Windows 7.Word 2010.Excel 2010.PowerPoint 2010.计算机网络基础.信息安全.多媒体技术基础.数据库基础等内容 ...

  7. AndoridSQLite数据库开发基础教程(10)

    AndoridSQLite数据库开发基础教程(10) 添加触发器 触发器(TRIGGER)是由事件来触发某个操作.这些事件包括INSERT.DELETE.UPDATE和UPDATE OF.当数据库系统 ...

  8. Spring Boot 2.x基础教程:JSR-303实现请求参数校验

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | didispace.com/spring-boot-learni ...

  9. Python基础教程(十):CGI编程、MySQL数据库

    Python CGI编程 什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如: ...

  10. Oracle数据库基础教程:入门其实很简单

    为什么80%的码农都做不了架构师?>>>    Oracle数据库基础教程:入门其实很简单 Oracle数据库系统是目前最流行的客户/服务器数据库之一.本文集从初学者的角度出发,由浅 ...

最新文章

  1. stick footers布局
  2. PyQt5 技术篇-窗口名、窗口图标的设置方法。
  3. 5、Power Query-抓取网页数据做漂亮的图表
  4. ai包装插件_找AI插件很费劲,一次给你66款AI插件合集!每一款都是设计师常用...
  5. Codeforces 362E Petya and Pipes 费用流建图
  6. 网络编程+Python
  7. EE Servlet 3:简单表单处理
  8. mysql从表截取信息_mysql中循环截取用户信息并插入到目标表对应的字段中
  9. 手机连接投影机的步骤_家用投影仪如何安装 家用投影仪安装方法【步骤详解】...
  10. 年近八旬教授曾一次性捐款8000多万,今获省杰出贡献奖!
  11. IntelliJ IDEA + EmmyLua:Lua IDE的安装与使用
  12. 联想笔记本声音太小怎么办_图文详解笔记本电脑声音太小解决方法
  13. TwinCAT 3 xml存储配置文件程序
  14. Qt 利用海康摄像头的ISAPI协议进行抓图等操作
  15. ST芯片烧录失败的原因分析及对策
  16. iOS 开启静音键时APP播放视频没有声音
  17. python中三个点(…)
  18. 150款国潮风城市插画
  19. 记一个小工具——font-spider(字蛛-css压缩中文字体字体)
  20. Linux Suse修改主机名hostname

热门文章

  1. Python数学建模系列(一):规划问题之线性规划
  2. 激光雷达(LiDAR)| 第一节:点云处理库与软件介绍
  3. 戴尔服务器安装群晖系统安装教程,实战群晖NAS小白安装教程与经验分享
  4. JAVA黑马刘意学习笔记
  5. JAVA流程图——主要用于循环
  6. 高程拟合的matlab代码,利用MATLAB结合C语言实现GPS高程二次曲面拟合
  7. 干货 | 利用SPSS进行高级统计分析第二期
  8. Python 高性能编程
  9. 网页设计个人主页代码
  10. 双轨制直销软件功能介绍