绪论
数据模型
两大数据模型
概念模型:按用户的观点来对数据来对数据和信息建模,主要用于数据库设计。
逻辑模型:主要包括层次模型、网状模型、关系模型,它是按照计算机系统的观点对数据建模,主要用于DBMS的实现。
- 数据库系统的三级模式结构
三级模式结构:
外模式(视图级)
模式/概念模式(表级)
内模式(文件级)
两级映射:
外模式-模式映射(保证逻辑独立性)
模式-内模式映射(保证物理独立性)
- 数据独立性
数据的独立性是指数据与程序独立,将数据的定义从程序中分离出去,由 DBMS 负责数据的存储,从而简化应用程序,大大减少应用程序编制的工作量。数据的独立性是由DBMS的二级映像功能来保证的。
(1)数据的物理独立性:是指当数据库的内模式发生改变时,数据的逻辑结构不变。由于应用程序处理的只是数据的逻辑结构,这样物理独立性可以保证,当数据的物理结构改变了,应用程序不用改变。但是,为了保证应用程序能够正确执行,需要修改概念模式内模式之间的映像。
(2)数据的逻辑独立性:是指用户的应用程序与数据库的逻辑结构是相互独立的。数据的逻辑结构发生变化后,用户程序也可以不修改。但是,为了保证应用程序能够正确执行,需要修改外模式/概念模式之间的映像。 - 数据库系统
数据库系统是指在计算机系统中引入数据库后构成的系统,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。
关系数据库
完整性是指数据库中存储的数据是有意义的或正确的,和现实世界相符。关系模型中有三类完整性约束(关系模型的三要素):关系数据结构、关系操作、完整性约束。
关系
在笛卡儿积中取出有实际意义的元组来构造关系。
关系也是一个二维表,表的每行对应一个元组,任意的两个元组不能完全相同;表的每列必须来自同一个域,不同的列也可以来自同一个域。
关系中不同列可以对应相同的域(比如两列都是字符串),为了加以区分,给每列取了一个名字,叫做属性
码:唯一确定一个元组。一个关系必须有一个码。
候选码:在关系中能唯一标识元组的属性或属性集
主属性:候选码的各个属性
主码:用户选作元组标识的候选码
全码:关系的所有属性是这个关系的候选码
4.关系模式
关系模式是对关系的描述。关系模式是型,关系是值。
关系模式通常可以记为R(U) 或 R(A1,A2,…,An)
R:关系名
A1,A2,…,An:属性名
比如,学生(学号,姓名,籍贯)
关系模式是对关系的描述,是静态的、稳定的;关系是在某一时刻的状态或内容,是动态的,随时间不断变化的。
关系的完整性约束
1.实体完整性
要求:主码唯一不能为空,主属性不能取空
:实体必须可区分。当在表中定义了主键时,数据库管理系统会自动保证数据的实体完整性,即保证不允许存在主键值为空的记录以及主键值重复的记录。
2.参照完整性
参照完整性是描述是实体之间的联系,一般指多个实体或者关系之间的关联关系。
外码取值:或者为空、或者等于被参照表中的某个元素的主码值
3.用户定义的完整性
某一具体应用的数据必须满足语义要求。
- 关系代数
关系代数是一种抽象的数据查询语言,用对关系的运算来表达查询。
传统的集合运算:
也就是二目运算,包括并、差、交、笛卡儿积4种运算。
专门的关系运算:
选择、投影、连接、除运算等。
视图
视图,是从一个或几个基本表(或视图)导出的表,它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中——所以,一旦基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这种意义上看,视图只是一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。
视图一经定义 create view ,就可以和基本表一样被查询、被删除 drop view 。还可以在一个视图之上再定义新的视图,但对视图的更新(增、删、改)操作则有一定的限制。本节专门讨论视图的定义、操作和作用。
数据库中只存放视图的定义,而不存放对应的数据
- List item
视图的作用
视图最终是定义在基本表之上的,对视图的一切操作最终也要转换成对基本表的操作。而且对非行列子集视图进行查询或更新时,还可能出现问题。既然如此,为什么要定义视图呢?这是因为合理使用视图能够带来许多好处。
-
视图能够简化用户的操作
通过定义视图,可以使数据库看起来结构简单清晰,让用户将注意力集中在所关心的数据上,并且简化用户的数据查询操作。例如,那些定义了若干张表连接的视图,就将表与表之间的连接操作对用户隐蔽起来了。换句话说,用户所做的只是对一个虚表的简单查询,而这个虚表是如何得来的,用户无需了解。 -
视图使不同用户能以多种角度看待同一数据
视图机制能使不同的用户以不同的方式看待同一数据,当许多不同种类的用户共享同一个数据库时,这种灵活性是非常重要的。 -
视图对重构数据库提供了一定程度的逻辑独立性
第1章介绍过数据的物理独立性和逻辑独立性的概念。数据的物理独立性是指用户的应用程序不依赖于数据库的物理结构。数据的逻辑独立性是指当数据库重构造时(如增加新的关系或对原有关系增加新的字段等),用户的应用程序不会受到影响。层次数据库和网状数据库一般能较好地支持数据的物理独立性,而对于逻辑独立性则不能完全地支持。
在关系数据库中,数据库的重构往往是不可避免的。重构数据库最常见的是将一个基本表垂直地分成多个基本表(分表),例如将学生关系 Student(Sno, Sname, Ssex, Sage, Sdept) 分成 SX(Sno, Sname, Sage) 和 SY(Sno, Ssex, Sdept) 两个关系,这时原表 Student 为 SX 和 SY 表自然连接的结果。如果建立一个视图 Student :
create view Student(Sno, Sname, Ssex, Sage, Sdept)
as
select SX.Sno, SX.Sname, SY.Ssex, SX.Sage, SY.dept
from SX, SY
where SX.Sno = SY.Sno;
-
视图能够对机密数据提供安全保护
有了视图机制,就可以在设计数据库应用系统时,对不同的用户定义不同的视图,使机密数据不出现在不应看到这些数据的用户视图上。这样,视图机制就自动提供了对机密数据的安全保护功能。例如 Student 表涉及了全校15个院系的学生数据,可以在其上定义15个视图,每个视图只包含一个院系的学生数据,并只允许每个院系的主任查询和修改本院系的学生视图。 -
适当利用视图可以更清晰地表达查询
例如,经常需要执行这样的查询“对每个同学找出他获得最高成绩的课程号”,为此可以定义一个视图,求出每个同学获得的最高成绩.
SQL
SQL特点:
1.综合统一
2.高度非过程化
3.面向集合的操作方式
4.以一种语法结构提供多种使用方式:交互式、嵌入式
5.语言简介、易学易用
==SQL(Structured Query Language)==是“结构化查询语言”,它是对关系型数据库的操作语言
SQL 分类
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
DQL(Data Query Language):数据查询语言,用来查询记录(数据)
- DDL(Data Definition Language):数据定义语言
基本操作
查看所有数据库:show databases;
切换数据库:use mydb1,切换到 mydb1 数据库;
1.操作数据库
创建数据库:CREATE DATABASE [IF NOT EXISTS] mydb1
;
例如:CREATE DATABASE mydb1,创建一个名为 mydb1 的数据库。如果这个数据已经存在,那么会报错。
例如 CREATE DATABASE IF NOT EXISTSmydb1,在名为 mydb1 的数据库不存在时创建该库,这样可以避免报错。
删除数据库:DROP DATABASE [IF EXISTS] mydb1
;
例如:DROP DATABASE mydb1,删除名为 mydb1 的数据库。如果这个数据库不存在,那么会报错。DROP DATABASE IF EXISTS mydb1,就算 mydb1不存在,也不会的报错。
修改数据库编码:ALTER DATABASE mydb1 CHARACTER SET utf8
修改数据库 mydb1 的编码为 utf8。注意,在 MySQL 中所有的 UTF-8 编码都
不能使用中间的“-”,即 UTF-8 要书写为 UTF8。
- DML(Data Manipulation Language):数据操作语言
1.插入数据
INSERT INTO TABLE(L1,L2,...);
INSERT INTO stu(sid, sname,age,gender) VALUES('s_1001', 'zhangSan', 23, 'male');
INSERT INTO stu(sid, sname) VALUES('s_1001', 'zhangSan');
INSERT INTO TABLE VALUES(值1,值2,...);
INSERT INTO stu VALUES('s_1002','lisi','32');
注意:字符串必须使用单引号
2.修改数据
语法:
UPDATE 表名 SET 列名 1=值 1, … 列名 n=值 n [WHERE 条件];
UPDAT stu SET snam = ‘zhagsss’,age = ‘32’,gendet = ‘female’ where sid = ‘s_1’;
3.删除数据
语法 1:
DELETE FROM 表名 [WHERE 条件];
DELETE FORM stu where sid = ‘s_1001’;
DELETE FORM stu WHERE sname = ‘chengxi’ OR age >30;
DCL(Data Control Language):数据控制语言
1.创建用户
语法:
CREATE USER ‘用户名’@地址 IDENTIFIED BY ‘密码’;
CREATE USER ‘user1’@localhost IDENTIFY BY ‘123’;
2.给用户授权
语法:
GRANT 权限 1, … , 权限 n ON 数据库.* TO ‘用户名’@地址;
GRANT CREATE,ALTER,DROP,INSERT ON mydb1.* TO user1localhost;
3.撤销授权
语法:
REVOKE 权限 1, … , 权限 n ON 数据库.* FROM ‘用户名’@地址;
REVOKE CREATE,ALTER ON mydb1.* from user1@localhost;
DQL(Data Query Language):数据查询语言
数据库执行 DQL 语句不会对数据进行改变,而是让数据库发送结果集给客户端。
语法:
select 列名 ----> 要查询的列名称
from 表名 ----> 要查询的表名称
where 条件 ----> 行条件
group by 分组列 ----> 对结果分组
having 分组条件 ----> 分组后的行条件
order by 排序列 ----> 对结果分组
limit 起始行, 行数 ----> 结果限定
创建表:stu
create TABLE stu(
sid char(6),
sname varchar(50),
age int,
gender varchar(50)
);
insert into stu values(‘s_1’,‘Lily’,12,‘male’);
1.基础查询
查询所有列
SELECT * FROM 表名;
(* :通配符,表示所有列)
select * from stu;
select sid,sname form stu;
2.条件查询
条件查询介绍
条件查询就是在查询时给出 WHERE 子句,在 WHERE 子句中可以使用如下运算符及关键字:
=、!=、<>、<、<=、>、>=;
BETWEEN…AND;
IN(set);
IS NULL;
AND;
OR;
NOT;
举例说明
查询性别为女,并且年龄小于 50 的记录
select * from stu
where gender = ‘female’ and age < 50;
查询姓名不为 null 的学生记录
select * from stu
where sname is not null;
3.模糊查询
SELECT 字段 FROM 表 WHERE 某字段 Like 条件
其中关于条件,SQL 提供了两种匹配模式:
% :表示任意 0 个或多个字符。可匹配任意类型和长度的字符,有些情
况下若是中文,请使用两个百分号(%%)表示。
_: 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字 符长度语句。
举例说明
查询姓名由 5 个字母构成的学生记录
select * from stu
where sname like ‘Li%’;
查询姓名中包含“a”字母的学生记录
SELECT * FROM stu WHERE sname LIKE ‘%a%’;
4.字段控制查询
去掉重复记录
去除重复记录(两行或两行以上记录中系列的上的数据都相同),例如 emp 表中 sal 字段就存在相同的记录。当只查询 emp 表的 sal 字段时,那么会出现重复记录,那么想去除重复记录,需要使用 DISTINCT:
select distinct sal from emp;
5.排序
查询所有学生记录,按年龄升序排序
select * from stu
order by age;
查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序
select * from emp
order by sal desc,empno asc;
6.聚合函数
聚合函数是用来做纵向运算的函数:
COUNT():统计指定列不为 NULL 的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为 0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为 0;
COUNT:当需要纵向统计时可以使用 COUNT()。
查询 emp 表中记录数:
select count(*) as cnt from emp;
查询 emp 表中有佣金的人数:
select count(comm) form emp;
查询所有雇员月薪和,以及所有雇员佣金和:
select sum(sal),sum(comm) from emp;
7.分组查询
当需要分组查询时需要使用 GROUP BY子句,例如查询每个部门的工资和,这说明要使用部分来分组。
查询每个部门的部门编号和每个部门的工资和:
select deptno,sum(sal)
form emp
group by deptno;
查询每个部门的部门编号以及每个部门的人数:
select deptno,count()
from emp
group by deptno;
查询每个部门的部门编号以及每个部门工资大于 1500 的人数:
select deptno,count()
from emp
where sla > 1500
group by deptno;
注意,WHERE 是对分组前记录的条件,如果某行记录没有满足 WHERE 子句的条件,那
么这行记录不会参加分组;而 HAVING 是对分组后数据的约束。
8.LIMIT:用来限定查询结果的起始行,以及总行数。
查询 5 行记录,起始行从 0 开始
SELECT * FROM emp LIMIT 0, 5;
注意,起始行从 0 开始,即第一行开始!
查询 10 行记录,起始行从 3 开始
SELECT * FROM emp LIMIT 3, 10;
9.多表连接查询: 表连接分为内连接和外连接。
他们之间最主要的区别:内连接仅选出两张表中互相匹配的记录,外连接会选出其他不匹配的记录。
数据库安全性
数据库的安全性是指为了保护数据库防止恶意破坏和非法存取。
数据库的完整性是指为了防止数据库中存在不合语义的数据,也就是为了防止数据库中存在不正确的数据。
措施:
1.用户身份鉴别:静态口令、动态口令鉴别、生物特征鉴别
2.存取控制:
(1)定义用户权限,并将用户权限登记到数据字典中。
(2)合法权限检查:用户发出存取数据库操作请求,数据库管理系统查找数据字典,根据安全规则进行合法权限检查。
权限定义和合法权检查机制一起组成了数据库管理系统的存取控制子系统
3.自主存取控制方法
自主存取控制主要通过 SQL 的 GRANT 语句和 REVOKE 语句实现。
用户权限由数据库对象和操作类型组成。
定义用户的存取权限:就是定义用户可以在哪些数据库对象上进行哪些类型的操作。
在数据库系统中,定义存取权限称为授权(authorization)。
在非关系系统中,用户只能对数据进行操作,存取控制的数据库对象也仅限于数据本身。
在关系数据库系统中,存取控制的对象不仅有数据本身(基本表中的数据、属性列上的数据),还有数据库模式(包括模式、基本表、视图和索引的创建等)。
5.数据库角色
数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。可以为一组具有相同权限的用户创建一个角色,使用角色来管理数据库可以简化授权的过程。
6.视图机制
可以为不同的用户定义不同的视图,把数据对象限制在一定的范围内。即通过视图机制把要保密的数据对无权存取这些数据的用户隐藏起来,从而自动对数据提供一定程度的安全保护。
视图机制间接地实现支持存取谓词的用户权限定义。
6.审计
审计功能把用户对数据库的所有操作自动记录下来放入**审计日志(audit log)**中。
审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
7.数据加密
数据加密是防止数据库中数据在存储和传输中失密的有效手段。
加密的基本思想是根据一定的算法将原始数据——明文(plain text)变换为不可直接识别的格式——密文(cipher text),从而使得不知道解密算法的人无法获知数据的内容。
数据加密主要包括存储加密和传输加密。
8.其他安全性保护
推理控制(inference control)
处理强制存取控制未解决的问题
避免用户利用其能够访问的数据推知更高密级的数据
常用方法:基于函数依赖的推理控制、基于敏感关联的推理控制
隐蔽信道(covert channel)
处理强制存取控制未解决的问题
数据隐私(data privacy)
数据隐私是控制不愿被他人知道或他人不便知道的个人数据的能力。
数据隐私范围很广,涉及数据管理中的数据收集、数据存储、数据处理和数据发布等各个阶段。
完整性约束
实体完整性
参照完整性
用户定义的完整性
为维护数据库的完整性,DBMS必须能:
1.提供定义完整性约束条件的机制
2.提供完整性检查的方法
3.违约处理
范式
范式是符合某一级别的关系模式的集合。
关系数据库一定要满足一定的要求。
1NF:一个关系模式的所有属性都是不可分的基本数据项。
2NF:R符合1NF,且每一个非主属性完全函数依赖于码。
3NF:每一个非主属性既不是部分依赖码也不是传递依赖于码。
规范化理论是数据库逻辑设计的工具。
目的:尽量消除插入、删除异常,删除异常,修改复杂,数据冗余
数据库设计
1.需求分析
2.概念结构设计
3.逻辑结构设计
4.物理结构设计
5.数据库实施
6.数据库的运行和维护