第五章 数据库

本文详细介绍了数据模型(概念和结构)、数据库的三级模式结构、关系模式及其完整性约束,涵盖了SQL语言的不同部分(DDL、DML、DQL、DCL),以及数据库设计的各个阶段,包括范式理论和并发控制技术。最后讨论了分布式数据库的特点和设计要素。
摘要由CSDN通过智能技术生成

这里写目录标题

  • 1.数据模型
    • 1.1概念数据模型
    • 2.结构数据模型
  • 2.数据库的三级模式结构
  • 3.关系模式
    • 3.1基本术语
    • 3.2完整性约束
    • 3.3传统的集合运算
    • 3.4专门的关系运算符
    • 3.5外连接
    • 3.6除
  • 4.关系代数转SQL语言
  • 5.数据语言
    • 5.1数据定义语言(DDL)
    • 5.2数据操纵语言(DML)
    • 5.3数据查询语言(DQL)
      • 5.3.1投影查询
      • 5.3.2选择查询
      • 5.3.3排序查询
      • 5.3.4聚合函数
      • 5.3.5表的连接查询(JOIN)
    • 5.4子查询
    • 5.5查询结果的并,交,差
  • 6.SQL访问控制
    • 6.1视图
  • 7.函数依赖
    • 7.1属性闭包计算
  • 8.范式
  • 9.数据库设计
    • 9.1用户需求分析
    • 9.2概念模型(E-R模型)
    • 9.3概念结构设计
    • 9.4逻辑结构设计
  • 10.数据库控制功能
  • 11.并发控制技术(封锁)
  • 12.分布式数据库

1.数据模型

信息=数据+数据处理

1.1概念数据模型

独立于计算机系统的模型,完全不涉及信息在系统中的表示

实体:客观存在并可以相互区别的事物

属性:描述实体的特性

码:唯一标识实体的属性集

域:属性的取值范围

两个实体间的联系:
一对一:1 : 1
一对多:1 : n
多对多:m : n

2.结构数据模型

面相数据库的逻辑结构

关系模型(二维表):实体与实体之间

2.数据库的三级模式结构

1.三级模式:
概念模式(模式)→基本表
外模式→视图
内模式→存储文件

2.两级映像:
模式/内模式:数据的物理独立性
外模式/模式:数据的逻辑独立性

3.关系模式

R<U,F>
R:表名
U:一组属性
F:为属性组U上的一组函数依赖
在这里插入图片描述

3.1基本术语

关系的描述称为关系模式

元组:表中的一行为一个元组

后选码(后选键):能唯一的标识一个元组

主码(主键):在多个后选码中选一个为主码

主属性:包含在后选码里的属性

外码(外键):一个关系中的属性或属性组并非该关系的码,而是另一个关系的码

全码:关系模式的所有属性组是这个关系的后选码

超码:一个包含码的属性集

3.2完整性约束

1.实体完整性:关系中的主码不能为空或部分为空

2.参照完整性:外码的每个值必须在关系中主码的值中找到或为空

3.用户定义的完整性:用户对某一数据指定的约束条件的检验

3.3传统的集合运算

1.关系的并

2.关系的差

3.关系的交

4.笛卡尔积:R的每个元组 * S的所有元组

3.4专门的关系运算符

1.投影(π):关系的垂直方向进行运算(列)

2.选择(σ):关系的水平方向进行运算(行)

3.连接连接(⨝):
在R和S的笛卡尔积中选择满足条件的元组
①θ连接:R⨝S,XθY是条件,更选择类似
②等值连接:R⨝S,X=Y是条件
③自然连接:是去除重复属性列的等值连接
在这里插入图片描述

3.5外连接

经过自然连接后会丢失某些数据,外链接可以避免这些数据的丢失

1.左外连接:不会丢失左表的信息,用null填充右表的属性

2.右外连接:不会丢失右表的信息,用null填充左表的属性

3.全外连接=自然连接+左外连接+右外连接

3.6除

R/S:R表中可以找到S的所有行(一个属性组)

4.关系代数转SQL语言

1.投影→SQL语言
在这里插入图片描述
2.选择→SQL语言
在这里插入图片描述
3.笛卡尔积→SQL语言
在这里插入图片描述
4.自然连接→SQL语言
在这里插入图片描述

5.数据语言

1.SQL语言的分类
DDL:数据定义语言
DML:数据操纵语言
DQL:数据查询语言
DCL:数据控制语言

5.1数据定义语言(DDL)

//1.建立数据库
CREATE DATABASE 数据库名 
//create database 数据库名

//2.建立基本表
CREATE TABLE 表名
(
    列名 数据类型 列级完整性约束
    ...
    表级完整性约束
)

//3.添加列
ALTER TABLE 表名 ADD 列名 类型
//alter table 表名 add 列名 类型

//4.修改列
ALTER TABLE MODIFY 列名 类型
//alter table 表名 modify 列名 类型

//5.删除列
ALTER TABLE 表名 DROP 列名
//alter table 表名 drop 列名

//6.删除基本表
DROP TABLE 表名
//drop table 表名
DROP TABLE TEST
ALTER TABLE TEST DROP f3
ALTER TABLE TEST MODIFY f3 FLOAR
ALTER TABLE TEST ADD f3 DATATIME

CREATE TABLE TEST
(
    f1 char(10),
    f2
)
/*
drop table test
alter table test drop f3
alter table test modify f3 float
alter table test add f3 datatime

create table test
(
    f1 char(10),
    f2 int
)
*/

1.列级完整性:
not null:不能为空
unique:唯一
not null unique:不能为空且唯一
default:默认

2.表级完整性约束:
①主键子句(PRIMARY KEY)实体完整性
②检查子句(CHECK)用户自定义完整性
③外键子句(FOREIGN KEY)参照完整性primary key == not null unique

CREAT TABLE test
(
    sid INT,
    PRIMARY KEY(sid)
)

CREAT TABLE test1
(
    cid INT,
    sid INT,
    score DOUBLE,
    CHECK(score >= 0 AND score <= 100)
    FOREIGN KEY(sid) REFERENCE test(sid)
)

5.2数据操纵语言(DML)

//1.直接插入元组值
INSERT INTO 表名(列名序列) VALUES(元组值)
//insert into 表名(列名序列) values(元组值)

//2.插入查询结果值
INSERT INTO 表名(列名序列) SELECT 查询语句
//insert into 表名(列名序列) select 查询语句

//3.删除语句
DELETE FROM 表名 [WHERE 条件表达式]
//delete from 表名 [where 条件表达式]
//[]里面的可以加也可以不加,不加就删除整张表

//4.修改语句
UPDATA 表名
SET 列名 = 表达式值[,列名 = 表达式值]
[WHERE 条件表达式]
INSERT INTO student VALUES('张三',18,'男')
INSERT INTO student(姓名,年龄) VALUES('李华',28)

INSERT INYO student SELECT '旺旺',28,'男'

DELETE FROM student WHERE 年龄 = 18

UPDATA student
SET 姓名 = '李四'
WHERE 姓名 = '旺旺'

SELECT * FROM student//*表示查询表中所有

5.3数据查询语言(DQL)

SELECT子句的输出项可以是列名,或由列名,常数和算数运算符构成的表达式

SELECT 目标表的列名或列表达式序列
FROM 关系名表序列
[WHERE 行条件表达式]
[GROUP BY 列名序列]
[HAVING 组条件表达式]
[ORDER BY 列名[ASC|DESC]...]

SELECT 学号,学号 * 100
FROM student

5.3.1投影查询

DISTINCE:去掉重复显示行

AS:当前列起别名

SELECT 学号,性别 FROM student

SELECT DISTINCE 系别 FROM teacher

SELECT 学号 AS 'SNO',性别 AS 'SEX'
FROM student

5.3.2选择查询

BETWEEN:检索两个范围内

LIKE:字符串的匹配运算,表示查找指定的属性值与’匹配串’相匹配的元素
%:任意长度的字符串,a%b:以a开头以b结尾
_:任意单个字符,a_b:以a开头以b结尾的3个字符串,a__b:4个字符串

IN:包含集合成员

SELECT * FROM score WHERE 分数 BETWEEN 60 AND 80;
SELECT * FROM score WHERE 分数 >= 60 AND 分数 <= 80

//[NOT]LINK '匹配串'
SELECT * FROM student WHERE 姓名 LIKE '王%'

SELECT * FROM student WHERE score IN (96,85,67,43)

SELECT * FROM student WHERE 姓名 = '张三' OE 性别 = '女'

5.3.3排序查询

ORDER BY:控制显示行的显示顺序,默认,ASC(升序),DESC(降序)必须是SELECT中最后一个子句

SELECT 姓名,年龄,性别
FROM student
WHERE 性别 = '男'
ORDER BY 年龄 DESC

SELECT *
FROM score
ORDER BY 课程号 ASC,分数 DESC

5.3.4聚合函数

数据统计,并返回单一的值

AVG:求平均值

COUNT:求总数

MIN:求最小值

MAX:求最大值

SUM:求和

SELECT 课程号,SUM(分数),AVG(分数)
FROM score
GROUP BY 课程号
//按课程号把值相同的分为一组
//分别计算每组的聚合函数

当条件中有聚合函数时用HAVING

SELECT 学号
FROM score
WHERE 分数 IS NOT NULL
GROUP BY 学号
HAVING MIN > 70 AND MAX < 90

SELECT后面有聚合函数,要把除聚合函数的所有列进行分组
在这里插入图片描述

5.3.5表的连接查询(JOIN)

SELECT 列名1,列名2...
FROM1,2...
WHERE 连接条件

1.内连接
①等值连接:链接条件是=
②非等值连接:链接条件是其它
③自连接:同一个表进行连接
2.外连接
①左外连接(LIFT JOIN)
②右外连接(RIGHT JOIN)
③全外连接(FULL JOIN)

5.4子查询

1.一般子查询
用于SELECT语句中的WHERE语句
查询的条件是另一个查询

一个子查询返回值为多行时,用ANY,ALL,IN,NOT IN

只执行一次

2.相关子查询
不止执行一次,会根据查询的变化而变化

3.带EXISTS测试的子查询
不返回任何数据,
子查询的结果不为空时,返回逻辑真值
子查询结果为空时,返回逻辑假值

5.5查询结果的并,交,差

UNION:并
INTERSECT:交
EXCEPT:差

6.SQL访问控制

1.授权的语句格式

GRANT 权限[,权限]
[ON 对象类型 对象名]
[TO 用户]

WITH GRANT OPTION:获得权限的用户还可以把权限赋给其它用户

6.1视图

从一个或多个基本表或视图中导出的虚拟表

//视图的创建
CREATE VIEW 视图名(列表名)
AS SELECT 查询子句 
[WITH CHECK OPTION]

//视图删除
DROP VIEW 视图名

索引改变的是内模式或存储文件的内容

7.函数依赖

1.函数依赖:X→Y是X决定Y,Y依赖于X

2.非平凡的函数依赖:X→Y,Y⊈X

3.平凡的函数依赖:X→Y,Y⊆X

4.完全函数依赖:X→Y,对于X的任意一个真子集X¹,所有X¹都不能决定Y,记作X——>Y

5.部分依赖函数:X→Y,某一个X¹可以决定Y

6.传递依赖:X→Y,Y→Z,Z对X传递依赖

7.码:设K为R<U,F>中属性的组合,
若K→U,且每一个K¹不能决定U,则K为U的候选码

8.主属性:包含在候选码中的属性,否则就是非主属性
U={ABCD}
后选关键字为AC
有两个主属性,2个非主属性

9.外码:X在R中,但X是另一个关系的码

10.全码:所有属性都是候选码

11.超码:属性组中包含码

12.函数依赖的公理系统
A3传递率:X→Y,Y→Z,X→Z
合并规则:X→Y,X→Z,X→YZ
分解规则:X→Y,Z⊆Y,X→Z

7.1属性闭包计算

在这里插入图片描述

8.范式

1.第一范式(1NF)不可再分
不能排除数据冗余和更新异常(修改,插入,删除)等问题,可能存在部分函数依赖
在这里插入图片描述

2.第二范式(2NF)
R必须是1NF
每个非主属性都完全依赖于候选码
分解后不能丢失信息
可能存在传递函数依赖
(学号→学院,学院→院长)
在这里插入图片描述
3.第三范式(3FN)
R必须是2FN
每个非主属性都非传递函数依赖于候选码
可能存在主属性对码的部分依赖和传递依赖
在这里插入图片描述
在这里插入图片描述
4.BC范式
所有非主属性对每个码都是完全依赖
所有的主属性对每个不包含它的码也完全依赖
已经消除了插入删除异常
在这里插入图片描述
5.第四范式(4NF)
多值依赖:X→→Y
对于R的每个非平凡多值依赖X→→Y,Y⊈X,
X都包含了R的一个候选码
在这里插入图片描述
在这里插入图片描述
伪传递:X→Y,WY→Z,XW→Z不属于3NF
在这里插入图片描述
无损连接:对关系模式分解后可以通过自然连接运算恢复

9.数据库设计

1.设计策略:自顶向下,自底向上

2.设计步骤(新奥尔良法):
①用户需求分析(手机用户需求,确定系统边界)
②概念设计(E-R图)
③逻辑设计(E-R图→关系模式,规范化)
④物理设计

9.1用户需求分析

用户需求分析(逻辑设计,数据字典)
系统需求说明书包括
数据流图,数据字典,需求说明文档

9.2概念模型(E-R模型)

属性:
1.简单属性和复合属性
2.单值属性和多值属性
3.null属性
4.派生属性:通过其它属性计算得出

弱实体:这种实体对于另一些实体具有很强的依赖性

9.3概念结构设计

1.选择局部应用
2.逐一设计分E-R图
3.E-R图合并

分E-R图之间的冲突
①属性冲突
②命名冲突(异名同义,同名异义)
③结构冲突

9.4逻辑结构设计

E-R图转换为关系模型
实体→关系模型
实体(属性)

联系→关系模型
1:1:把联系的属性归并到任意一方实体中
在这里插入图片描述
1:n:把1方的码归并到多方里
在这里插入图片描述
m:n:把双方实体的码放到联系中
在这里插入图片描述
规范化:
根据语义→数据依赖→范式(3NF,BCNF)

10.数据库控制功能

事务管理特性:
原子性,一致性,隔离性,持久性

备份方法:
建立数据冗余(重复存储),建立冗余数据的方法是进行数据转储和登记日志文件

数据的转储:
①静态转储和动态存储:静态在数据存储期间不允许对数据库进行任何存取,修改操作;动态允许
②海量转储和增量转储:海量每次转储全部数据,增量每次转储上次转储后更新过的数据
③日志文件:事务开始到事务结束的每一次操作都写入日志文件(事务故障,系统故障,介质故障)

恢复:反向扫码日志文,执行逆操作,直至事务的开始标志

11.并发控制技术(封锁)

封锁:排它锁(X锁/写锁),共享锁(S锁/读锁)

1.排它锁:事务T对数据对象A加上X锁,就只允许T读取和修改A,其它事务不可以再对A加任何类型的锁,直到T释放A上的锁

2.共享锁:事务T对数据对象A加上S锁,就只允许T读取A,其它事务只能对A加S锁,直到T释放A上的锁

12.分布式数据库

分片透明:用户或应用程序不需要知道逻辑上访问的表具体是怎么分块处理的
复制透明:采用复制技术的分布方法,用户不需要知道数据是恢复到哪些节点,如何复制的
位置透明:用户无需知道数据存放的物理位置
逻辑透明:用户或应用程序不需要知道局部场地使用的是哪种数据类型

共享性:数据存储在不同的节点数据共享
自治性:每节点对本地数据都能独立管理
可用性:当某一场地故障时,系统可以使用其它场地上的副本而不至于使整个系统瘫痪
分布性:数据在不同场地上的存储

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值