1、数据(Data):数据是描述事物的符号记录。
种类:文本、图形、图像、音频、视频等
特点:数据与语义不可分割,数据是有结构的
2、数据库(DB:Database):长期储存在计算机内、有组织、可共享的数据集合
3、数据库管理系统(DBMS:Database Management System):对数据库中的数据进行存储和管理的软件系统。
例如:Dbase、Oracle、mysql、sql server
功能:
数据定义功能——提供数据库定义语言(DDL)
数据组织、存储和管理
数据操纵功能——提供数据操纵语言(DML)进行基本操作
数据事务管理和运行管理
4、数据库系统(DBS:Database Application System)
由数据库、数据库管理系统、应用系统、数据库软硬件支撑环境、数据库管理员和用户构成
二、数据管理技术的发展过程
人工管理阶段:没有磁盘、操作系统,只能计算、无法存储结果
文件系统管理阶段:出现操作系统(文件系统),可以存储计算结果
数据库管理阶段:大容量、大规模、数据共享

三、数据独立性
逻辑独立性:当表达现实世界的信息内容发生变化时,不影响应用程序特性(增加删除信息)
物理独立性:当数据的存储位置或存储结构发生变化时,不影响应用程序的特性(存放位置)
四、数据库系统的组成
狭义:数据库、数据库管理系统、数据库应用系统
广义:数据库、数据库管理系统(核心)、数据库应用系统、人员(数据库管理员、系统分析员和数据库设计员、程序员)、软硬件、用户
第二章 数据库系统结构(内部结构)
一、信息与数据
1、信息:从数据中获得的有意义的内容(人脑对现实世界事物的存在方式、运动状态以及事物之间联系的抽象反应)。
2、数据:描述事物的符号记录。
数据语法:数据的格式
数据语义:数据含义。数据赋予不同语义有不同解释。
表现形式:数字、文字、图像、声音等。
3、数据静态特征:
l 数据基本结构
l 数据的联系
l 数据取值范围的约束
动态特征:对数据的操作(查询、插入删除更新)以及操作规则
对数据的静态特征和动态特征的描述称为数据模型三要素。
3、数据与信息的区别和联系:
数据是信息的符号表示;
信息是对数据的语义解释。
信息=数据+语义 数据+数据处理=信息
二、概念层数据模型(概念模型)
现实世界:由客观存在的事务及其联系组成。如:学生选修课程。
信息世界(概念世界):对客观事物及联系的一种抽象描述。如:学生信息、教师信息
计算机世界(数据世界):对信息世界中信息的数据化。
1、从数据的语义视角抽取模型,按照用户的观点对数据和信息建模。是现实世界到信息世界的抽象。
与具体的DBMS无关,与具体的实现方式无关
常用模型:实体-联系模型、语义对象模型
2、实体-联系模型

(1)实体:客观存在并可以相互区别的“事物”。可以是具体的人事物,又可以是抽象的事件。
用矩形框表示,框内写明实体名。
(2)属性:实体所具有的特征或特质。用椭圆形表示,用无向边与其对应实体连接
(3)联系:数据之间的关联集合
用菱形表示,框内写明联系名,用无向边与有关实体连接,并在边旁标上联系的类型(1..1、1...n或m...n)。
联系种类:
一对一(1:1) 一对多(1:n) 多对多(m:n)
 
ER 模型转换为关系模式的原则:
一对一:遇到一对一关系的话,在两个实体任选一个添加另一个实体的主键即可。
一对多:遇到一对多关系的话,在多端添加另一端的主键。
多对多:遇到多对多关系的话,我们需要将联系转换为实体,然后在该实体上加上另外两个实体的主键,作为联系实体的主键,然后再加上该联系自身带的属性即可。
三、组织层数据模型(组织模型)
从数据的组织层次来描述数据
根据数据组织方式分,分为:非关系模型(层次模型、网状模型)、关系模型、面向对象模型、对象-关系模型
关系模型概述:
(一)关系数据结构
关系:满足以下性质的二维表
关系表中的每一列都是不可再分的基本属性
表中行、列次序不重要
关系数据模型:用关系(二位表格数据)表示实体和实体关系之间联系的模型。
元组:表中的一行为一个元组,相当于一个记录值
属性:表中一列是一个属性,属性名称即属性名
分量:元组中的每一个属性值称为元组的一个分量。n元关系的每个元组有n个分量。
域:属性的取值范围。如性别的域为:(‘男’,‘女’)
候选码:能够唯一标识关系中的一个元组的一个属性或最小属性组。
主码:指定候选码中的一个作为主码
主属性:包含在任一候选码中的属性
非主属性:不包含在任意候选码中的属性
关系模式:二维表的结构(表框架或表头结构)。即:关系名R(属性A1,属性A2,...)例如:学生关系模式:学生(学号、姓名、性别、年龄)

关系模式与关系:
关系模式是型,对关系的描述,静态的、稳定的
关系是值,关系模式在某一时刻的状态或内容,是动态的、随时间变化的
(二)关系操作
1、符号

2、传统的关系运算:
(1)并 (2)交

 
(3)差 (4)笛卡尔积

 
3、专门的关系运算
(1)选择(从行的角度) (2)投影(从列的角度)
 
(3)连接
 


(4)除(行和列)

(三)数据完整性约束
数据完整性是指数据库中存储的数据是有意义的或正确的。
(1)实体完整性:每个元组都是可识别的和唯一的(主键非空)
表中不允许存在:无主码值的记录、主码值相同的记录
(2)参照完整性:描述多个实体之间的联系,一般用外码实现。(外码要么为空,要么为被参照表的主码)
外码:取作子表(本表)属性之一的主表(外表、父表)主码。
关系R的外码或者值为空;或者等于被引用表(被参照表)中某个元组的主码值
外码可以有重复值
(3)用户定义的完整性(域完整性、语义完整性):用户定义应遵循的约束条件
四、数据库系统的结构
(一)内部体系结构
从DBMS来看,采用三级模式结构

1、外模式(External Schema)
又称为子模式或用户模式,数据库用户能看到并允许使用的局部数据的逻辑结构和特征的描述,局部逻辑结构。
外模式是模式的的子集,可有多个。
介于概念模式与应用系统之间,模式与外模式:一对多。外模式与应用:一对多(应用程序基于外模式)。
2、模式(Schema)
又称为概念模式或逻辑模式。是对数据库中全体数据的逻辑结构和特征的描述,是数据库的整体逻辑。
作用:
对下层,不涉及数据的物理存储细节和硬件环境
对上层,与具体的应用程序、程序开发工具和程序设计语言无关
一个数据库只有一个模式
3、内模式(Internal Schema)
又称为存储模式或物理模式,处于最内层。是对数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。
一个数据库只有一个内模式。
小结:一个数据库系统,实际存在的只是物理级数据库,即内模式是数据访问的基础。
用户根据外模式进行的操作,通过外模式到模式的映射与概念级数据库联系起来,又通过模式到内模式的映射与物理界数据库联系起来。
(二)二级映像
保证了数据的逻辑独立性和物理独立性。
外模式/模式映像:保证了数据与程序间的逻辑独立性。即当模式改变时,通过修改此映像,使外模式保持不变,应用程序依赖于外模式,从而应用程序不必修改。(如增加或删除了某些字段)
模式/内模式映像:保证了数据的物理独立性。即当数据库的存储结构改变了,通过修改此映像使模式不变,应用程序不受影响。(如从链表存储改为了哈希表存储)
(二)外部体系结构
从最终用户角度来看:
单用户结构数据库系统:应用程序、DBMS和数据库装在一台计算机,一个用户独占使用。
主从式结构:大型主机带多个终端的多用户结构。
分布式结构:数据库分布存储在不同计算机,逻辑上整体。
客户/服务器结构:服务器和客户机分开。
浏览器/服务器结构:客户通过浏览器
第三章 SQL语言基础
一、基本概念
SQL:结构化查询语言,是关系数据库的标准语言。
SQL功能
命令动词
数据定义语言(DDL)
Create、drop、alter
数据库查询语言(DQL)
select
数据库操纵语言(DML)
Insert、update、delete
数据库控制语言(DCL)
Grant、revoke
基本表:独立存在的表,SQL中一个关系对应一个基本表。一个(或多个)基本表对应一个存储文件,一个表可以带若干索引。
视图:从一个或多个基本表中导出的虚表,数据库中只存放视图的定义。用户可以在视图上在定义视图。
存储文件:逻辑上组成了内模式,物理上是任意的,对用户透明。
索引:为快速访问数据,在包含数据的表由增加的一种组织。分为聚簇索引和非聚簇索引。
聚簇索引:索引项顺序与基本表中记录的物理顺序一致的索引结构。
二、SQL的数据类型
1、数值型
(1)准确型
整数:Bigint: 8字节 lnt:4字节 Smallint:2字节 Tinyint:1字节,O~255整数 Bit:1位,存储1或0
小数:Numeric (p,q)或Decimal (p,q),其中: p为数字位长度,q:小数位长度。
(2)近似型:Float:8字节
2、日期时间型
Datetime: 8字节,年月日时分秒毫秒(例:‘2001/08/03 10:30:00.00o’)
SmallDateTime:4字节,年月日时分(例:‘2001/08/03 10:30:00’)
3、字符串型
(1)普通编码字符串类型
Char (n):定长存储,n<=8000
Varchar (n) :不定长存储(按实际),长度不超过n , n<=8000 注: n为字符个数
Text:存储大于8000字节的文本
(2)统一字符编码字符串类型
nchar (n):定长存储,n<=4000
nvarchar (n) :不定长存储,长度最大不超过n , n<=4000
ntext:存储大于8000字节的文本
特点:每个字符占两个字节
(3)二进制字符串类型
Binary(n):固定长度,n <=8000
Varbinary(n):可变长度,n <=8000 .注: n为二进制数据的字节数
image:大容量、可变长二进制字符数据,可用于存储文件
三、数据定义功能
1、定义基本表
CREATE TABLE<表名>
(<列名><数据类型>[列级完整性约束定义]
{,<列名><数据类型>
[列级完整性约束定义] ...}
[,表级完整性约束定义])
列级完整性约束:
Not null:列取值非空——name char(10) not null
Default:给定列的默认值
Unique:限制列取值不重复
Check:限制列的取值范围
Primary key:主码——sno char(7) primary key / primary key(sno,cno)
Foreign key:外码——foreign key(sno) references 学生表(sno)
Not null和default只能是列级完整性约束,其他约束可以在表级完整性约束处定义。
例:创建学生-课程成绩表

2、删除表
Drop table 表名
3、修改表结构
ALTER TABLE<表名>
[ALTER COLUMN<列名><新数据类型>]|[ADD [COLUMN]<列名><数据类型>|[ DROP COLUMN<列名>]|[ADD PRIMARY KEY(列名[,...n])]|[ADD FOREIGN KEY(列名)
REFERNECES表名(列名)]
四、数据完整性
1、完整性约束条件的作用对象有表、元组和列。
列级约束:对列的数据类型、取值范围、格式、精度等约束。
元组约束:元组中各个字段之间的相互约束。例如:开始日期小于结束日期。
关系元组:若干元组之间、关系之间的联系的约束。例如:学号不重复。
2、实现约束
(1)PRIMARY KEY约束
每个表有且只有一个,保证实体完整性
Alter table 表名 add [constraint 约束名] primary key(列名)
Alter table 雇员表 add constraint PK_EMP primary key(雇员编号)
(2)UNIQUE约束
保证列不输入重复值,用于唯一性质的列上,例如身份证号等。
Alter table 雇员表 add constraint UK_SID unique(电话号码)
(3)FOREIGN KEY约束
外码,加强联系
Alter table 雇员表 add constraint FK_job_id foreign key(工作编号) references 工作表(工作编号)
(4)DEFAULT约束
为列提供默认值,一个default只能约束一列
Alter table 雇员表 add constraint DF_SALARY default 1000 for 工资
(5)CHECK约束
限制列的取值
Alter table 雇员表 add constraint CHK_Salary check(工资>=500)
五、数据库定义与删除
1、定义
Create database数据库名称
on primary ( name=数据文件逻辑名,filename=数据文件物理名,size=初始大小,maxsize=最大,filegrowth=增长率)
log on(日志文件的性质...);
2、删除数据库
语法格式:
Drop database 数据库名称;
例如:Drop database mydb;
第四章 数据操纵语句
一、数据查询
1、基本结构
Select (distinct) 列名 from 表名或视图名 where 条件表达式 group by 列名 having 条件表达式 order by 列名 (asc/desc)
(1)查询全部列:select * from 表名
(2)改变列标题:select name as 姓名,2020-age as 年份,’出生年份’ 出生年份 from student
(3)消除重复行:select distinct sno from SC
(4)查询条件

(5)字符匹配: 列名 [not] like <匹配串>
匹配串中可包含如下四种通配符:
_:匹配任意一个字符;
%:匹配O个或多个字符;
[]:匹配[]中的任意一个字符;对于连续字母的匹配,例如匹配[abcd],可简写为[a-d]
[^]:不匹配[]中的任意一个字符
例.省词姓"张’的字生的详细信息。
SELECT*FROM Student WHERE Sname LIKE"张%"
例.查询学生表中姓‘张’、‘李’和‘刘’的学生的情况。
SELECT *FROM Student WHERE Sname LIKE'[张李刘]%'
例.查询名字中第2个字为‘小’或‘大’的学生的姓名和学号。
SELECT Sname,Sno FROM Student WHERE Sname LIKE '_[小大]%'
(6)多重条件
用AND连接的条件表示必须全部满足所有的条件的结果才为True;
用OR连接的条件表示只要满足其中一个条件结果即为True。
例:查询计算机系年龄在20岁以下的学生姓名。
SELECT Sname FROM Student WHERE Sdept =‘计算机系' AND Sage < 20
(7)计算函数汇总数据:
SQL提供的计算函数有:
COUNT( * )﹔统计表中元组个数;
COUNT ([DISTINCT]<列名>):统计本列值的个数
SUM([DISTINCT]<列名>):计算本列值总和;
AVG([DISTINCT]<列名>):计算本列平均值;
MAX([DISTINCT]<列名>):求本列最大值;
MIN([DISTINCT]<列名>):求本列最小值。
注意:除COUNT(*)外,其他函数均忽略NULL值。
(8)分组计算。执行顺序:where——group by——having
2、多表连接查询
(1)内连接
Select 列名from 表名 [inner] join 被连接表 on 连接条件
自连接:特殊的内连接,即相互连接的表物理上为同一张表,但是为两个表取别名,逻辑上成为两个表
例:查询信恳系修了VB课程的学生的修课成绩,要求列出学生姓名、课程名和成绩。
SELECT Sname,Cname,Grade FROM Student s JOIN sc ON s.Sno = sc.Sno
JOIN Course c ON c.Cno = sc.Cno WHERE Sdept= '信息系' AND Cname = 'VB'
(2)外连接
只限制一张表中的数据必须满足连接条件,而另一张表中数据可以不满足
语法:from 表1 left/right [outer] join 表2 on <连接条件>
例:查询哪些课程没有人选,列出其课程名。
SELECT Cname FROM Course C LEFT OUTER JOIN SC ON C.Cno = sc.Cno WHERE SC.cno is NULL
3、Top限制结果集
格式:
TOP n [percent] [WITH TIES]Top n:查询结果的前n行
Top percent:查询结果的前n%行数据WITH TIES:包括并列的结果
必须用Order by子句对查询结果排序
4、子查询
子查询是一个select查询,嵌套在语句的where或having子句中,或其他子查询中。
子查询可以做集合测试(in)、比较测试、存在测试(exists)

二、数据更改功能
1、插入数据
Insert into Student values(‘20190001’,’张三’,’男’,18)
2、更新数据
Update Student set sage=21 where sno=’2 0190001’
3、删除数据
Delete from SC where Grade<60
三、查询语句扩展
1、查询结果存到新表中: selete Sdept,count(*) as 人数 into dept_cnt from Student group by Sdept
2、case表达式

3、查询结果的并交差运算
Union(并)、instersect(交)、except(差)
位于多个select查询语句之间
第五章 视图
1、视图:有基本表构成的虚表
2、定义语法:create view <视图名> [视图列名表] as 查询语句
说明:
查询语句中通常不含order by和distinct语句
缺省时视图列名与查询列名相同
查询的源表可以是已定义的视图
视图的列名序列或者全部省略,或全部指定。
例1.建立信息系学生的视图。
CREATE VIEW IS_Student AS
SELECT Sno, Sname, SageFROM Student WHERE Sdept = '信息’
定义了视图后,可以和表一样,用SELECT语句访问它。
修改视图:
Alter view 视图名 [视图列名] as 查询语句
删除视图:
Drop view <视图名>
3、视图作用:
l 简化数据查询语句
l 用户多角度看待统一数据
l 提高数据安全性
l 提高逻辑独立性
第六章 关系数据库规范化理论
数据冗余:同一信息在数据库存储多个副本,可能引起:
冗余存储:信息重复存储,浪费空间
更新异常:修改一个副本,所以都需要修改。
插入异常:只有一些信息已经存放,另外一些才能存入数据库
删除异常:删除可能丢失信息
原因:存在模式依赖
解决方式:通过分解关系模式来消除其中不合适的数据依赖。
一、函数依赖
1、基本概念
Y=f(X) 省=f(城市) 给出一个具体的城市值,会有唯一一个Y对应
X函数决定Y函数,或Y函数依赖于X函数,表示为:X—>Y
例1:对学生关系模式
Student (Sno,Sname,Sdept,Sage)
有以下依赖关系:Sno→Sname, Sno→Sdept,Sno→Sage
例2:对于选课关系
SC (Sno,Cno, Grade)
有以下依赖关系:(Sno,Cno)→Grade
2、术语与符号
1.如果X→Y,但Y不包含于X,则称X→Y是非平凡的函数依赖。
2.如果X→Y,但Y包含于X,则称X→Y是平凡的函数依赖。
若无特别声明,讨论的都是非平凡的函数依赖。
3.如果X→Y,则称X为决定因子,Y为被决定因子。
4.如果X→Y,并且Y→X,则记作X<—->Y。
5.如果X→Y,并且对于X的一个任意真子集X’都有X’十>Y,则称Y完全函数依赖于X:

如果X→Y成立,并且对于X的某个真子集X’有x'→Y成立,则称Y部分函数依赖于X:

6.如果X→Y(非平凡函数依赖,且Y十>X)Y→Z,则称z传递函数依赖于x,记作:


二、关系规范化
1、定义:关系规范化是将有“不良”函数依赖的关系模式转换为良好的关系模式的理论。
2、范式种类
各种范式之间存在联系:

某一关系模式R为第n范式,可简记为R∈nNF。
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。
(1)第一范式(1NF):
定义:一个关系模式R的所有属性都是不可分割的基本数据项
注意:不满足第一范式的数据库模式不能成为关系数据库
(2)第二范式(2NF)
2NF的定义:如果R(UF)∈1NF,并且中的每个非主属性都完全函数依赖于码,则R(UF)∈2NF。
例:S-L-C(Sno,Sdept,SLoc,Cno,Grade)因为有:Sno →SLOC,因此存在部分函数依赖,该表不是2NF。
如果某个1NF的关系的主码只由一个码组成,那么这个关系为2NF。
目的:将部份依赖主码的数据移到其他表中。
分解方法:
l 首先,对于组成主码的属性集合的每一个子集,用它作为主码构成一个表。
l 然后,将依赖于这些主码的属性放置到相应的表中。
l 最后,去掉只由主码的子集构成的表。

对S-L-C (Sno,Sdept,SLoc,Cno,Grade)首先分解为如下形式的三张表:
- S-L (Sno,...)
- C (Cno,...)
- S-C(Sno, Cno,...)
然后,将依赖于这些主码的属性放置到相应的表中,形成如下三张表:
- S-L(Sno,Sdept,Sloc)
- C (Cno)
. S-C (Sno, Cno, Grade)
最后,去掉只由主码的子集构成的表。S-L-C(Sno.Sdept.SLOC.Cno.Grade)
分解后的关系模式的函数依赖关系:
S-L (Sno,

浙公网安备 33010602011771号