空间数据库
目录
绪论
1.数据库系统概述
计算机三大领域(可考):科学计算、过程控制、数据处理
数据:人们用来反映客观世界而记录下来的可以鉴别的数字、字母或者符号等(数字,文字,图形,图像等)
信息===数据+数据处理
数据是信息的符号标识或载体
信息是数据的内涵
信息的特征:
-
源于物质和能量
-
可以感知
-
可存储、加工、传递和再生
知识是信息在人们认知的加工下所得出的东西
90---数据
90℃---信息
90℃使人烫伤---知识
数据处理:将数据转换成信息的过程(为了信息产生而处理数据)
数据管理:数据的收集、分类、组织等操作
数据管理阶段分为:
-
人工管理阶段-----应用程序与数据之间呈现一一对应的关系
-
文件系统阶段
-
数据库系统阶段---一个数据库管理系统DBMS管理多个应用程序,一个数据集对应多个应用程序
2.数据库系统DBS组成
组成:数据库DB、数据库用户、计算机软件系统(包含DBMS)、计算机硬件系统
数据库DB:存储在计算机内、有组织的、可共享的数据集合
用户:对数据库进行存储、维护和检索 (最终用户{你们}、应用程序员{我们}、数据库管理员{他们})
硬件系统:存储和运行数据库系统的硬件设备
软件系统:硬件系统+数据库系统 (DBMS+OS+应用系统)
数据库系统:是指计算机系统引入数据库后的系统
数据库管理系统:位于用户与操作系统之间的一层数据管理软件,包括数据定义功能、数据操纵功能、管理功能、维护功能
2.1 DBMS功能、组成
数据库系统/数据库管理系统的功能(总体方向):
-
数据定义
-
查询
-
更新
-
各种控制
具体而言
-
数据定义功能----三级模式+二级映射
-
数据操纵功能-----自主型、宿主型
-
数据库运行管理功能
-
数据库的建立和维护功能
-
数据通信接口
-
数据组织、存储与管理
DBMS组成
-
语言编译处理程序
-
系统运行控制程序
-
系统建立、维护程序
-
数字字典
3.数据库系统结构
3.1数据库内部结构
数据库系统内部的体系结构从逻辑上分为三级:外模式(用户级)、模式(概念级)、内模式(物理级)
外模式(多个):数据库用户能看到并且允许使用的那部分局部数据的逻辑结构和特征的描述-----概念模式的某一部分的抽象表示
模式(1个):数据库全体数据的逻辑结构和特征的描述----整个数据库实际存储的抽象表达
内模式(1个):它是对数据库存储结构的描述,是数据在数据库内部的表示方法----整个数据库实际存储的表示
二级映象:
外模式/模式映象----保证数据与程序间的逻辑独立性
模式/内模式映象----确保数据的物理独立性
三级模式和二级映像的优点:
-
保证数据的独立性
-
简化了用户接口
-
有利于数据共享
-
有利于数据的安全保密
3.2数据库系统的外部结构
-
单用户结构的数据库
-
主从式结构的数据库
-
分布式结构的数据库
-
客户/服务器结构的数据库系统C/S
-
浏览器/服务器结构的数据库系统B/S
4.数据模型
4.1 数据模型概念及分类
数据模型是数据库的框架
数据模型是数据库系统的核心和基础
世界分为现实世界、信息世界、计算机世界
主要面向客户(用户),也可以成为现实世界---------通过认知抽象。完成概念模型
数据库设计员的详细化,面向信息世界--------从概念模型转换为逻辑模型
面向机器世界:由DBMS完成转型,变成物理模型
4.2 三个世界相关概念
信息世界基本概念
-
实体---客观存在并且相互区别的“事物”,可以是具体也是抽象的事件
-
属性---实体具有的某一特性
-
实体型----具有相同属性的实体必然具备的的共同特征
-
实体集---同型实体的集合
-
码---唯一标识一个实体的属性或者属性集
-
域----属性的取值范围
不同实体集存在一对一,一对多,多对多的关系
计算机世界基本概念
-
字段---标记实体属性的命名单位
-
记录---字段的有序集合,例如一个学生
-
文件---同一类记录的集合
-
关键字---唯一标识文件中每个记录的字段或字段集
现实世界 | 信息世界 | 计算机世界 |
---|---|---|
事物总体 | 实体集 | 文件 |
事件个体 | 实体 | 记录 |
特征 | 属性 | 字段 |
事物间联系 | 实体模型 | 数据模型 |
计算机世界对数据模型的需求
数据模型组成要素:
-
数据结构:数据对象的类型、内容、性质等(层次结构、网状结构、关系结构等)
-
数据操作:对数据库中的各种数据允许执行操作的集合实体(查询,更新[插入、删除、修改])
-
数据的完整性约束:数据模型遵守基本的完整性约束条件(正确,有效,相容)
4.3 四种数据模型
四种模型
-
层次结构---使用树结构来表示
优点:结构简单,查询效率高,提供良好的数据完整性支持
缺点:不能直接展示多对多联系,插入和删除限制多……
-
网状结构---常使用图结构
优点:表示实体间的多种复杂联系,具有良好的性能和存储效率
缺点:数据结构复杂,数据操纵语言复杂,了解系统结构的细节
-
关系模型--二维表形式展示
优点:严格的数学理论根据,用关系描述实体间的联系,更高的数据独立性和更好的安全保密性
缺点:查询效率较低
-
面向对象的模型
优点:完整地描述现实世界的数据结构,具有丰富地表达能力
缺点:模型相对复杂,涉及知识较多
第一章 关系数据库基础
1 关系数据库模型概述
1970提出关系数据模型,后来进行完善。提出关系的第一、二、三范式等等
关系:
-
单一的数据结构----关系
-
逻辑关系---二维表
-
建立在集合代数的基础上
2 关系数据结构相关概念
域(值域):一组具有相同数据类型的集合 例如:D={男,女}
给定一组域D1,D2,…,Dn(它们可以包含相同的元素,即可以完全不同,也可以部分或全部相同)。D1,D2,…,Dn的笛卡尔积为 :D1×D2×……×Dn={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}
分量:每一个元素(d1,d2........dn)的每一个值di叫做分量
元组:每一个元素(d1,d2........dn)叫做n元组 (类似于一行数据)
笛卡尔积D1×D2×…×Dn的任一子集称为定义在域D1,D2,…,Dn上的n元关系(Relation)
关系是笛卡尔积的一个子集,可以把关系看成一个二维表
关系:关系头(不变,属性名的集合组成)+关系体(可变)
关系是一种规范化了的二维表中行的集合
-
每一列中的分量必须来自同一个域,必须是同一类型的数据。
-
不同的列可来自同一个域,每一列称为属性,不同的属性必须有不同的名字 。
-
属性的顺序可以任意交换。
-
关系中元组的顺序(即行序)可任意。
-
关系中不允许出现相同的元组。
-
关系中每一分量必须是不可分的数据项。
3 关系的形式化定义
关系的描述称为关系模式
关系模式是型(表头),关系是值(表中记录)
关系模式:对关系的描述,静态的,稳定的
关系:关系模式在某一刻的状态或内容,动态的
4 样例关系数据库模型
概念模型E-R图
关系模型
5 关系的码与完整性
关系键是一个表中的一个或几个属性,用来标识该表的每一行或与另一个表产生联系。(主键+超码+候选码……)
超码=码=超键:能够唯一标识一条记录的属性或属性集
候选码:能够唯一标识一条记录的最小属性集,称为候选码(Candidate Key) 唯一性+最小性
二者的区别:一个是只要有代表属性即可,另外一个是只能有代表属性,例如桃花可以只代表花,但是加了狗尾巴草,这也算是超码,有代表。而候选码只能是花属性。
主码(Primary Key) :从多个候选码中选择一个作为查询、插入或删除元组的操作变量,被选用的候选码称为 主关系码 ------有且仅有一个
外码:参照其他表的属性 。
注意:被参照关系的主码和参照关系的外码必须定义在同一个域上! (如果二者为不同的类型,系统也会报错)
主属性:包含在候选码中的各个属性称为主属性
非主属性:不包含在任何候选码中的属性称为非码属性(或非主属性)
全码:所有属性的组合是关系的候选码。(名字+寝室号才能确定你是学生,而表只有名字+寝室号作为数据项)
(5条消息) 一文搞懂候选码、主码、全码、外码、主属性、主键、主关键字、非主属性清晰总结树莓雪糕的博客-CSDN博客什么是候选码举例
关系的完整性
-
实体完整性---主码的值不能为空/部分为空
-
参照完整性---外码与关系的主码相符合
-
用户定义的完整性
6 关系代数
定义:一般用抽象的查询语言表达关系模型的数据操作,不对应任何特定的数据库平台。
关系操作:
-
查询:选择、投影、连接、除、并、交、差
-
数据更新:插入、删除、修改
查询为主要功能,选择、投影、并、差、笛卡尔积为基本操作。操作的对象和结果都是集合,一次一集合的方式
关系中,属性个数称为「度」或「目」,3度表示这个表有3列。
6.1传统关系运算(数学方面)
集合运算的适用性(相容性)
-
具有相同的度
-
R中的第i个属性和S中的第i个属性必须来自同一域
除了笛卡尔积外,其他传统集合运算都要符合上述条件
并、差、交、广义笛卡尔积运算
6.2专门的关系运算
部分名词定义:
象集:给定一个关系R(X,Z),X和Z为属性组,定义当t[X]=x时,x在R中的象集(image set)为Zx={t[Z]|t∈R,t[X]=x},它表示R中的属性组X上值为x的诸元组在Z上分量的集合。
人话就是 X1在Y的象集就是所有X1下的Y上的取值集合。
选择
投影
投影是选择出符合条件的一列,并且会自动取消某些行(去重)
连接
从两个关系的笛卡尔积中选择属性之间满足一定关系的元组(一般底下都会有条件进行筛选,例如X<Y等等),反正第一步就是先按照笛卡尔积的形式进行链接,然后再筛选。
自然连接和等值连接的区别
-
自然连接要求相等属性值的属性名相同,而等值连接不要求;
-
自然连接是去掉重复列的等值连接
内连接:会丢弃两表都没有相通的元组(自然连接、等值连接都是如此)
外连接:就会保留下来,把R表和S表被丢弃的元组捡了回来,并且在最终连接的表中没有的值用NULL替代
左外连接:因为R表在左边,所以最终的结果只保留R表中被丢弃的特有元组,S表的特有元组仍然丢弃。
右外连接:因为S表在右边,所以最终的结果只保留S表中被丢弃的特有元组,R表的特有元组仍然丢弃
除法运算
(1条消息) 数据库关系代数详解Charon_cc的博客-CSDN博客关系代数
第二章 关系数据库语言SQL
1 什么是SQL
sql是一种数据库编程语言,实现对数据库的数据操作(数据模型三要素之一),也可用于定义数据库的完整性。sql是关系代数的计算机世界的实现
特点
-
非过程语言
-
面向集合
-
自含式+嵌入式
-
具有数据查询、定义、操纵、控制的功能
2 数据定义 DDL
-
主数据文件——关键文件(1个) mdf
-
辅佐数据文件(任意个) ndf
-
日志文件(任意个)——事务日志信息 ldf
文件组:将多个数据文件集合形成的一个整体,便于管理。
-
主文件组
-
用户自定义文件组
日志文件不属于任何文件组
sql server的模式逻辑构成
-
表
-
视图
-
数据类型
-
数据完整性对象(索引、约束、默认值等)
-
过程对象(函数、存储过程、触发器)
数据库对象:完全名、部分限定名
完全名:服务器名+数据库名+所有者+对象名
创建数据库的方式
-
使用向导界面创建数据库
-
使用SQL语句创建数据库
基本语法:
-
Create database <database_name>——新建数据库
-
on primary() 主事务、辅助文件
-
log on ()日志文件
-
primary上面书写mdf、ndf文件,log上面书写日志文件,多个文件需要用,隔开
-
Alter database database_name——修改数据库
-
ADD FILE
-
REMOVE FILEGROUP
-
……
-
-
Drop database <database_name>——删除数据库
表的基本概念
-
表名:每个表都有名字
-
记录:表中的每一行称为记录
-
字段:每个记录由若干项数据项组成,构成记录的每个数据项称为字段
-
关键字:表中记录的某一个字段或字段组合能唯一标识记录
数据类型
创建方式:
-
使用向导界面创建数据表
-
使用SQL语言创建数据表
-
Create table table_name(列名、类型、是否为空、主键、默认值等等)
-
ALter table table_name {注意她不用加括号}
-
Alter column 列名 新的类型 空值等等
-
ADD 列名 新类型 空值等等
-
DROP TABLE/COLUMN 表名/列名
-
-
Drop Table 表名——删除表
3 数据操纵 DML
-
insert into table_name(属性) values(……)——插入新记录
-
insert into 属性 select语句
注意点:
-
必须用逗号将各个数据分开,字符型数据要用单引号括起来。
-
如果INTO子句中没有指定列名,则新添加的记录必须在每个属性列上均有值,
-
且VALUES子句中值的排列顺序要和表中各属性列的排列顺序一致
-
update table_name set ....where——更新记录
-
delete from table_name (where)...——删除记录
4 数据查询 DQL
单表查询
select select_list (into new _table) from table_source (where)
-
选择表中指定的列(select 列名 from 表名 where 条件)
-
查询全部列(select * from table_name)
-
修改查询结果中列标题
-
使用as——select 列名 as 修改名称 from table_name where 条件
-
使用= ——select 修改名称 = 列名 from table_name where 条件
(等于号可以理解为一个赋值语句,所以右边是源列名,左边就是修改后的名字)
-
-
替换查询结果的数据
case……end
-
消除结果集中重复行
select distinct 消除行关键字 ……
-
限制结果集返回的行数
select top number 列名 ……
-
运用条件筛选记录
select ... from ... where 条件筛选
查询条件 | 谓语 |
---|---|
比较 | <=,<,>,>=,=,<>,!= |
指定范围 | BETWEEN A AND B,IN |
确定集合 | IN,NOT IN |
字符匹配 | LIKE,NO LIKE |
空值 | IS NULL,IS NOT NULL |
多重条件 | AND,OR |
-
对查询结果进行排序
select ... from... where... order by 列名 desc{降序}/asc{升序} select... group by 分组条件 with CUBE|ROLLUP
ROLLUP:对分组列按次序依次进行分组统计; CUBE:对每种可能的组合进行分组统计。
-
对分组统计结果进行条件筛选
having 选择条件
多表查询
-
连接条件筛选
不推荐的写法(连接与筛选条件混为一体) select ... from 表名 where 表名.数据项=另一个表名.数据项 ... 推荐写法 select ... from 表名 JOIN 表名…… ON 表名.数据项 = 表名.数据项 where 条件筛选
内连接:(inner)JOIN——只返回满足条件的行
外连接: OUTER JOIN
交叉连接:CROSS JOIN——不能带有where子句,不能有条件
嵌套查询
定义:将一个查询块嵌套在另一个查询块的WHERE或HAVING子句的条件中的查询
in和等号的区别在于,in返回的是一个结果集,=只能接收一个值
EXISTS谓词用于测试子查询的结果是否为空表
5 数据控制 DCL
-
权限管理——grant、revoke
-
数据保护——back up(扩展语言)
delete删除记录
drop删除对象
第三章 索引与视图
1 索引的作用和类型
索引:按照一定顺序对表中一列或若干列建立的列值与记录行之间的对应关系表(由DBMS管理)
作用:
-
快速存储数据
-
利用索引减少排序和分组的时间
组织方式分类
-
聚簇索引——数据表物理顺序与索引顺序保持一致(拼音)
-
非聚簇索引——不一致顺序,基础表和记录表顺序不一样(部首)
聚簇索引:将数据行的键值在表内排序并存储对应的数据记录,使得数据表物理顺序与索引顺序一致。一个表只能有一个聚簇索引。
非聚簇索引:完全独立于数据行的结构,数据和索引存储在不同的地方。
2 创建和使用索引
一个表只有一个聚簇索引。但可以创建多个非聚簇索引(最多249个)
复合索引中包含的字段最多为16个——先班级,后年纪等等分类(复合索引)
用户创建的每个索引均在系统表sysindexes上注册
缺点:
-
创建索引需要一定的磁盘空间
-
降低添加、删除和更新数据行的速度,需要维护索引
聚簇索引适用范围
-
包含有限数据值的列(例如专业分类太多了)
-
经常使用between,>,<等运算符(需要顺序的记录,折半方便)
-
查询返回大结果集
非聚簇索引
-
大量非重复值的列
-
where子句
-
查询不返回大结果集
索引一旦建立,无法修改,即使可以编辑,实质是删除后新增。
3 视图的概念和作用
视图(二维表)——一个表或多个表导出的虚拟表——实现逻辑独立性的重要机制。是一组数据的逻辑表示,其本质是对应于一条SELECT语句,结果集被赋予一个名字,即视图名字
优点:
-
简化用户的数据查询和处理
-
屏蔽数据库的复杂性
-
简化用户权限的管理
-
便于数据共享
-
重新组织数据
4 视图的定义与管理
基本语法:
create view 视图名(设置视图)
as
选择语句
选择视图属性
-
ENCRYPTION:说明在系统表syscomments中存储CREATEVIEW语句时进行加密;
-
SCHEMABINDING:说明将视图与所依赖的表或视图结构相关联;
-
VIEW_ METADATA:指定为引用视图的查询请求浏览模式的元数据时,返回有关视图的元数据信息;
create view语句中包含的select查询
-
不能包含COMPUTE或COMPUT BY子句
-
不能包含ORDER BY,除非有TOP
-
不能包含INTO
-
不能引用临时表
要通过视图更新基本表数据,必须保证视图时是可更新视图
可更新视图情况
-
可更新的分区视图(例如专业)
-
同时满足
-
select无聚合函数,且top、group、distinct、union没有
-
select语句不包含基本表列计算所得列(例如替换,0----女)
-
select语句的from至少一个基本表
-
第四章 数据库完整性实现
1 数据库完整性概述
数据完整性:指的是数据库中的数据在逻辑上的一致性和准确性,为的是确保数据库的数据质量
数据完整性包括:
-
实体完整性——要求表中只有一个主键或者多个唯一键
-
参照完整性——定义外键与主键之间或者外键与唯一键之间的对用关系实现参照完整性
-
域完整性——定义相关的规则、默认值、约束对于输入的列值
-
用户自定义的完整性——通过存储过程和触发器实现
2 实体完整性
使用主键约束/唯一性约束可实现表的实体完整性
-
通过创建主键定义主键约束(PRIMARY KEY)
-
确保非主键列不输入重复值,则在列上定义唯一性约束(UNIQUE)
一个数据表只能创建一个PRIMARY KEY约束,并且值不能为空,创建的是聚簇类型的索引;
而数据表可以创建多UNIQUE约束,允许为空,非聚簇索引
3 参照完整性
参照的是主表得主码或者唯一码,同时二者得数据类型要一致
要求:
-
从表中不能引用主表中对应键不存在的值
-
如果主表中的键值更改了,那么从表的该键值的引用都要进行一致的更改。
-
如果删除主表中的记录,应先删除表中与记录匹配的相关记录
4 域完整性
通过定义相关的规则、默认值、约束对象等保证输入的列值具有正确的数据类型并在域内
-
使用默认值进行规范
-
定义表/修改表时,定义默认值约束
-
先定义默认值对象,然后绑定到表的相应字段
-
(默认值约束依赖表,而默认值对象不依赖表)
-
-
使用规则对象
-
定义规则对象 ,绑定到列/用户自定义类型上
-
解绑和删除规则对象
-
注意事项:
-
规则只允许在当前的数据库创建
-
规则不能绑定到系统数据类型
-
规则不能绑定到基类型的列
-
-
-
使用CHECK约束
第五章 数据库安全性
5.1安全概述
Sql Serve的安全管理认证
-
对用户进行身份认证
-
对用户进行操作进行权限控制
三道闸门
-
必须通过登录Sql Serve服务器的身份认证(进入校门)
-
必须是数据库的用户(进入教室)
-
必须有执行操作的权限(使用课桌等等权力)
认证模式:
-
Windows认证模式(安全程度相对更高,更为推荐)
-
Sql Serve认证模式
5.2 数据库用户与角色
要想访问数据库,就必须有该数据库的用户账号。
一个用户账号对应于一个登录账户
一个登录账号可以对应多个用户账号(一个钥匙开一把锁,用户可以有多个钥匙)
角色:具有相同权限的账号或用户分为一组,授予这个组一定的权限。——具有某些权限的组
角色分为服务器角色和数据库角色
-
服务器角色可用来管理服务器上的权限。
例如sysadmin——执行任何操作,diskadmin——管理磁盘文件等等
-
数据库用户——为某一用户或某一组用户授予不同级别的管理或访问数据对象的权限
一个用户可具有多个角色
5.3 权限管理
权限分为语句权限和对象权限
语句权限:创建数据库、数据库对象的权限称为语句权限
例如:backup、create等等
对象权限:针对数据表、视图和存储过程执行的操作
例如 select、insert、delete、execute等
第六章 数据库保护
6.1 事务
6.1.1 事务的概念
事务是数据库系统中的执行的一个工作单位。——操作对象
一个事务可以是一组SQL语句、一句SQL语句或整个程序。
注意:一个事务执行成功,表明该事务中的所有语句的执行成功,只要一条语句出现问题,就会取消整个语句
-
Begin Transaction 指定事务的开始
-
Commit或者Rollback 回滚/提交一个事务,用来指定事务的结束
-
REVOKE是废除某用户或某组或所有用户的访问权限
6.1.2 ACID原则
ACID
A(原子性):事务必须是数据库的逻辑工作单元,即事务中包括的诸要素要么全执行,要么全不执行。
C(一致性):事务在完成时,必须使所有的数据都保持一致状态
I(隔离性):一个事务的执行不能被其他事务干扰
D(持久性):一个事务一旦提交,对数据库的修改就是永久的
注意:AC用事务管理实现,I用锁来实现,D通过事务日志来实现。
6.1.3 事务类型
类型:系统提供的事务和用户定义的事务
系统提供的事务——delete、insert、select、updata、alter、create
用户的定义 事务——begin transaction(开始)、commit/rollback(结束)
事务处理语句:
-
BEGIN TRANSCATION 开始一个事务
-
SAVE TRANSCATION 事务内设置保存点
-
ROLLBACK TRANSACTION 回滚事务到起点或指定的保存点处
-
COMMIT TRANSCATION 提交一个事务
6.2 并发控制
6.2.1 多用户并发访问
允许多个用户同时使用的数据库系统案例
事务串行执行、交叉并发方式、同时并发方式
问题(不一致性):
-
丢失修改
-
不可重复读
-
读脏数据
解决方案
-
有封锁
-
时间戳
-
乐观控制法
6.2.2 锁
锁分为基本锁和专用锁(了解)
-
基本锁
-
共享锁(SLock)——只允许查看SELECT语句
-
排他锁(XLock)——用于数据修改操作UPDATA、DELETE、INSERT
-
-
专用锁
锁定粒子
灵活选定所锁定的资源粒度
-
RID行标识——锁定单行表数据
-
键值(具有索引的行数据)
-
页面(一个数据的页面)
-
区域:一组连续的8个数据页面
-
表:整个表。包括所有的数据和索引
-
数据库:一个数据库
活锁——插队使得事务永久等待
死锁——相互等待对方的数据——只能靠数据库管理人员解决
一次封锁法:要求每个事务都加锁数据——降低系统并发度
顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按照该顺序封锁
6.3 备份和恢复概述
数据可能发生破坏的原因
-
计算机硬件故障
-
软件故障
-
病毒
-
误操作
-
自然灾害
-
盗窃
6.4 数据库备份
备份的四种方式
-
完全数据库备份——对所有数据库操作和事务日志得事务进行备份
-
差异备份/增量备份——对最近一次数据库备份以来发生得数据变化进行备份
-
事务日志备份——对数据库发生的事务进行备份
-
数据库文件和文件组备份——数据备份可以是局部的
备份设备:是用来存储数据库的地方(一个标识,就不需要记住文件名的路径),可以是硬盘、磁带、命名管道
T-SQL:
备份整个数据库——backup database 数据库名 to
备份日志——backup log 日志名 to
6.5 恢复数据库
T-SQL
恢复数据库——RESTORE DATABASE
第七章 T-SQL程序设计
T-SQL的语言规范分为三大类
数据定义语言DDL:Create、Alter、Drop
数据操纵语言DML:Select、Insert、Update、Delete
数据控制语言DCL:Grant、Revoke、(DENY)
7.1 T-SQL基本对象
7.1.1数据类型
-
字符型
-
nchar、nvarchar——unicode编码
-
char、varchar——非unicode编码
-
-
数值型——整数、小数
-
日期、时间型 datetime(4字节存放日期,4字节存放时间),smalldatetime就是2+2。
-
二进制型——binary、varbinary
-
位型——bit
-
文本——text
-
图像型——image
-
货币型
-
特殊数据类型——cursor、table
对于位型,应该算是特殊的二进制型,对于文本,就是专门存储几百万行的字符串,而图像,就是特殊的二进制型
7.1.2 注释
行注释--
块注释/* */
--这是注释 /* 这是行注释 */
7.1.3 标识符
常规标识符,就是符合标识符格式规则(数字、字母、下划线那套)
非常规标识符(不符合规则的标识符)需要用双引号或者方括号进行标识
select * from authos --这里的authos不需要特殊框定 select * from [student info] --非空格的非常规标识符
7.1.4 常量
字符常量
-
ASCII字符常量——'china'
-
Unicode字符常量——N'china'
tip:如果内部字符串带有单引号就使用两个单引号进行嵌入
// 'i am people' // 'i am ''people'' '
整型常量
-
十六进制整型常量
-
二进制整型常量
-
十进制整型常量
实型常量
日期时间常量
money常量……
7.1.5 变量
变量分为全局变量和局部变量
全局变量用@@声明
局部变量用@声明
局部变量的使用——使用DECLARE声明,自动赋值为NULL
用declare声明变量,set、select赋值
使用SET(单个)、SELECT(多个)为变量赋值
--声明变量 declare @star char(24),@int1 int --使用SET语句为变量赋值 SET @int1 = 3 PRINT '@int' +STR(@int1) --使用SELECT语句为变量赋值 SELECT @str1 = '你好', @int = 8 PRINT'@str1'+@str1
select注意说明:
-
SELECT @local_ variable通 常用于将单个值赋给变量 如果expression为列名,则可能返回多个值,此时将返回的最后一个值赋给变量;
-
如果SELECT语句没有返回值,变量将保留当前值;
-
如果expression是不返回值的标量子查询,则将变量 设为NULL
--定义变量,给变量赋初值 DECLARE @var1 varchar(36), @var2 char(24) SET @var1 = 'SQL Server教程’ GO --用SELECT语句赋值1 SELECT @var1 =书名,@var2=作者 FROM BOOK WHERE出版社= '一个不存在的出版社' --输出结果 SELECT @var1 AS书名,@var2 AS作者 /*最后结果打印的是SQL Serve教程 null 注意,这里的select是输出结果语句,如果没有as ,输出的结果没有列名*/ /* 不返回值的标量子查询,则将变量设为NULL*/ --定义变量,给变量赋初值 DECLARE @var1 varchar(36), @var2 char(24) SET @var1 = 'SQL Server教程' --用SELECT语句赋值2 SELECT @var1 = ( SELECT书名 FROM BOOK where出版社= '不可能的出版社') --输出结果 SELECT @var1 AS书名 /*输出的结果是NULL!!!!!! */
7.2 运算符与表达式
算数运算符、赋值表达符、位运算符、比较运算符、逻辑运算符等等
xxxx between xxx to xxx
like的使用,一个字符串在另外的字符串模式里面
/* 模式串%5%A% 要求5和A中间可以是任何字符 */ IF '2345%%ASDAS' LIKE '%5%A%' --这个条件为true,因为5和A之间是任何字符,这里的字符串是%% IF '2345%%ASDAS' LIKE '%5E%A%' ESCAPE'E' --这个条件为false,这里的ESCAP相当于命名转义字符是E,中间只能由一个%
ANY——集合中的任何多个 (>=1个)
ALL——集中的所有
IN——在集合中
-
ANY、ALL后面返回单列的子查询,IN后面可以接子查询和集合表达式
-
=ANY等价于IN,而!=ANY不等于NOT IN(!all才等于)
7.3 流程控制语句
控制语句 | 说明 |
---|---|
IF...ELSE | 条件语句 |
CASE(函数) | 多条件分支语句 |
GOTO | 转移语句 |
WHILE | 循环语句 |
CONTINUE | 跳出当前一次循环 |
BREAK | 直接跳出循环体 |
RETURN | 无条件返回 |
WAITFOR | 为语句的执行设置延迟 |
SELECT 专业名,性别= CASE 性别 WHEN 0 THEN '男' WHEN 1 THEN '女' END ,COUNT(*) AS 人数 FROM XS GROUP BY 专业名,性别
使用begin...end作为一个语句块的结束
waitfor:用于暂时停止程序的执行,直至所设定的等待时间已过或者到达指定时间点才能继续往下执行。
WAITFOR {DELAY 'TIME'|TIME 'TIME'} //DELAY:等待时间段 //TIME:等待时间点 WAITFOR DELAY '000:00:01:500' PRINT '你已经等待了1.5秒!谢谢你的等待! ' GO
批处理是指将包含一个或多个T-SQL语句的组,一次性发送给服务器处理,会被看作一个可执行单元(称为执行计划)
输出语句
-
PRINT:用于将用户定义的消息返回客户端
-
RAISERROR:把消息返回给应用程序方面的功能更加强大
7.4 函数
函数:一组完成特定算法处理逻辑的T-SQL语句的预编译集合,在T-SQL语句中直接使用
函数还可以根据返回的类型,操纵的对象分类
-
行集函数:函数返回对象,返回的对象可以像表一样被T-SQL语句所参照
-
聚合函数:对一组值进行操作,返回单一的汇总值,如统计函数
-
标量函数:对单一值进行操作,返回单一值,如日期时间函数
还可以分为内置函数和用户自定义函数
系统内置函数
-
ABS函数——返回绝对值
-
ACOS、ASIN函数——反余弦/反正弦函数
-
RAND函数——返回0到1之间的随机数
-
LEFT / RIGHT函数——返回字符串左边/右边指定数目的子字符串
-
LTRIM / RTRIM函数:消除字符串前导/后导空格,语法
-
REPLACE(string_expression1, string_expression2, string_expression3) (原始字符串,被替换的字符串,用来替换的字符串)
-
SUBSTRING(string_expression1,start,length) (原始字符串,提取子串的起始位置,提取子串的长度)
-
CAST / CONVERT函数:实现数据类型的转换
cast (被转换的变量 AS 转换成类型); convert(转换成的类型,变量,*)
-
GETDATE函数:提取当前系统时间
-
DATEPART函数:获取日期时间的指定部分 (datepart(datepart,date))
-
DATEDIFF函数:计算时间间隔(datepart,startdate,enddate) datepart指定返回时间格式
DECLARE @var1 datetime,@var2 int set @var1 = GETDATE() set @var2 = DATEPART(YYYY,'2018-11-03 14:13:12.583') select @var1 as 时间,@var2 as 具体年份 输出当前时间+2018
用户定义函数
(根据返回值的形式分类)
-
标量型用户定义函数——返回一个确定类型的标量值
-
内嵌表值型用户定义函数——将单个select语句 的结果集作为table变量类型返回,则该表可以更新
-
多语句表值型用户定义函数——定义函数包含多个select语句,则函数返回的表不可以更新
--创建视图 CREATE VIEW view_age AS SELECT 借书证号,性别, DATEPART(yyyy,GETDATE()) -DATEPART(yyyy,出生时间) AS 年龄 FROM 图书借阅2.dbo.XS GO --创建函数 CREATE FUNCTION aver_age (@sex bit) RETURNS INT AS BEGIN DECLARE @aver int SELECT @aver=(SELECT AVG(年龄) FROM view_age WHERE 性别=@sex) RETURN @aver END go --调用函数 DECLARE @sex1 bit DECLARE @aver1 int SELECT @sex1=1 SELECT @aver1=dbo.aver_age(@sex1) --第一种调用形式,这里是把sex1的值给了函数的参数 SELECT @aver1 AS '女读者的平均年龄' EXEC @aver1=dbo.aver_age @sex=0 --第二种调用形式,这里是直接赋值给函数的参数,个人推荐后面的这种,因为存储过程和触发器都是exec执行 SELECT @aver1 AS '男读者的平均年龄'
内嵌表值型函数(*)
多语句表值型函数(*)
7.5 存储过程
存储过程:是一组完成特定功能的T-SQL语句的预编译集合,它是经过编译后存储在数据库中的,前台和后台程序都可以通过它的名字执行它
跟函数的区别,主要就在前台和后台程序,二者都是预编译语句
存储过程分类
-
系统存储过程——系统存储过程定义在系统数据库master之中,其前缀是sp_
-
本地存储过程(用户存储过程)——其名称不能以sp_为前缀
-
扩展存储过程——可在SQL Server环境中执行的外部动态链接库中的函数与方法。
-
临时存储过程(了解)
-
远程存储过程(了解)
存储过程的作用
-
减少网络流量(运算是在服务器端,而服务器运算能力强,所以无需担心运算不过来的情况)
-
增强代码的重用性
-
提高执行速度
-
保证安全性
创建语法
CREATE PROC xxxxx AS xxxxxxxxxx GO 使用方法 EXEC readers_info
创建方式:界面方式(许多属性无法修改)/命令方式(推荐)
无传递参数存储过程
使用带参数的存储过程
使用OUTPUT游标参数的存储过程(*)
使用with encryption选项(*)
自动存储过程的特点:如果存储过程标记为自动执行,则每次启动服务时都会自动执行存储过程
EXECUTE sp_procoption ‘procedure_name’, STARTUP, ON|OFF
7.6 触发器
触发器:一类特殊的存储过程,在该表或视图发出update、insert、delete的时候自动执行
触发器是通过触发事件而执行的,自动执行,而存储过程需要名称被调用
触发器分类
-
INSERT触发器
-
UPDATE触发器
-
DELETE触发器
也可以分为(按照执行时间来看)
-
AFTER触发器——执行特定数据库操作之后
-
INSTEAD OF 触发器(
INSTEAD OF
触发器会跳过DML
语句并执行其他语句。)
触发器的作用:
-
不可以被调用,自动执行
-
可以在两个非主、外键的约束的表间做级联式更新
-
可利用触发器实现数据判断与分析
-
可以利用触发器实现复杂的数据约束
-
禁止或回滚违反引起的完整性的更改
创建一个触发器需要确定以下几个方面:
-
触发器在哪个表上创建;
-
触发器的触发事件,也就是是插入触发器、删除触发器、更新触发器。
-
触发器执行的时间点,也就是AFTER触发器还是INSTEAD OF触发器;
-
触发器要干什么,也就是触发器的T-SQL语句;
CREATE TRIGGER 名字 ON 表名 {FOR 类型} AS XXXXXXX 创建代码: CREATE TRIGGER send_newbook_message ON BOOK FOR INSERT --等同于AFTER INSERT AS RAISERROR ('新书入库!', 16, 10) GO 测试触发器: INSERT BOOK(ISBN,书名,作者,出版社,价格,复本量) VALUES('7-111-06359-x', 'testBook‘, 'shao', '长江大学', $7.4, 3)
INSTEAD OF触发器可以代替其触发事件的操作。
执行触发器的时候会创建两个特殊的逻辑表(inserted+deleted)
inserted存放新的记录,deleted存放旧的记录(ps:修改相当于删除一条旧纪录(deleted),然后添加新的记录(inserted))
指定触发器执行顺序
当一个表定义了多个after触发器,可利用系统存储过程的sp_settriggerorder来指定触发器的执行顺序
sp_ settriggerorder @triggername = 'MyTrigger', @order = 'first', @stmttype = 'UPDATE'
第八章 关系数据库理论
8.1 规范化问题的提出
关系数据库的规范化理论
-
函数依赖(核心,是模式分解和设计的基础)
-
范式(模式分解的标准)
-
模式设计
一个好的关系模式
-
尽可能少的数据冗余
-
没有插入异常
-
没有删除异常
-
没有更新异常
8.2 函数依赖
某属性唯一确定其他属性,其他属性依赖于该属性
函数依赖
-
完全函数依赖
-
部分函数依赖
-
传递函数依赖
部分函数依赖:设X,Y是关系R的两个属性集合,存X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
比如说:C可以通过AB得到,并且C也可以仅通过A得到,仅通过B得到,那么就说C部分依赖AB。
完全函数依赖:设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。
比如说:C可以通过AB得到,并且C不可以仅通过A得到,也不可以仅通过B得到,那么就说C完全依赖AB。
传递函数依赖:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。
比如说:B可以通过A得到,C可以通过B得到,那么就称C传递依赖A。
关系模式分解问题
衡量标准:是否具有无损连接、是否保持函数依赖
8.3 关系模式的范式
8.3.1 第一范式
定义:如果关系模式R所有的属性均为简单属性,即每个属性都是不可再分的,则称R属于第一范式
-
第一范式是关系模式应具备的最起码的条件
-
第一范式可能存在数据冗余
-
需要使用投影运算将关系分解
8.3.2 第二范式
定义:如果关系模式R∈1NF,且每个非主属性都完全函数依赖于R的主关系键,则R称为第二范式
-
从1NF关系中消除非主属性对主关系键的部分函数依赖,则可以得到2NF。
-
2NF规范化是指把1NF关系模式通过投影分解,转换成2NF关系模式的集合
缺点
-
数据冗余
-
插入异常
-
删除异常
-
更新异常
8.3.3 第三范式
定义:如果关系模式R∈2NF,且每个非主属性都不传递函数依赖于R的主关系键,则称R属于第三范式
下图得符合2NF其实也是第三范式,些许不恰当感觉。
三张图搞透第一范式(1NF)、第二范式(2NF)和第三范式(3NF)的区别cczu_chan的博客-CSDN博客第一范式第二范式第三范式的区别
【数据库】关系模式的范式的简明判断 - RioTian - 博客园 (cnblogs.com)
主键只可能有一个,但一个主键可以由多个字段组成
8.3.4 BC范式
定义:关系模式R∈1NF,且所有函数依赖X-->Y,决定因素X都包含了R的候选键,则称R属于BC范式。
8.3.5 多值依赖与第四范式
不考。我也看不懂,长篇大论(;´д`)ゞ
8.4 关系模式的规范化
一个低一级范式的关系模式,通过模式分解转换乘若干个高一级范式的关系模式的集合,这种分解过程叫做关系模式的规范化
目的:使结构合理,消除存储异常,使得数据冗余尽量小,便于插入、删除和更新
等价三标准
-
分解具有无损连接性
-
分解具有函数依赖保持性
第九章 数据库设计
9.1 数据库设计概述
数据库设计任务:数据库设计是指根据用户需求研制数据库结构的过程
数据库设计的内容
-
结构设计——概念设计、逻辑设计和物理设计
-
行为设计——应用程序的设计
数据库设计方法
-
基于E-R模型的数据库设计方法
-
基于3NF的数据库设计方法
-
基于视图的数据库设计方法
数据库设计步骤
-
系统需求分析阶段
-
概念结构设计阶段
-
逻辑结构设计阶段
-
物理结构设计阶段
-
数据库实施阶段
-
数据库运行与维护阶段
9.2 系统需求分析
需求分析的方法:自顶向下,自底向上
数据流图
-
用命名的箭头表示数据流
-
用圆圈表示处理
-
用户型或其他形状表示存储
数据字典:对系统种数据的详细描述,是各类数据结构和属性的清单
9.3 概念结构设计
概念模型特点
-
语义表达能力丰富
-
易于交流和理解
-
易于修改和扩充
-
易于向各种数据模型转换
概念结构设计的方法
自顶向下、自底向上、逐步扩张、混合策略
9.4 逻辑结构设计
9.5 物理结构设计
-
确定物理结构
-
评价物理结构
9.5.1 确定物理结构
-
存储记录结构的设计
-
访问方法的设计
-
数据存放位置的设计
-
系统配置的设计
9.6 数据库实施
9.7数据库运行和维护
-
维护数据库的安全性与完整性
-
监测并改善数据库性能
-
重新组织和构造数据库
如何将ER图转化为关系模型(含案例) - 知乎 (zhihu.com)
习题部分
1.试述数据、数据库、数据库管理系统、数据库系统概念
数据:描述事物的符号记录
数据库:长期存储在计算机内、有组织的、可共享的大量数据的集合。其中存储的数据具有永久储存、有组织和可共享三个基本特点,并且数据采取了某一种数据模型进行组织、描述和存储
数据库管理系统:一个科学管理、组织存储、获取、维护数据的计算机基础软件 系统
数据库系统是由数据库、数据库管理系统、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统
2.使用数据库系统有什么好处?
-
可以大大提高应用开发效率
-
便于修改逻辑结构,数据与程序之间独立
-
减轻DBA维护系统的负担
3.试述文件系统与数据库系统的区别和联系
文件系统 | 数据库系统 |
---|---|
面向一个应用 | 面向整个企业 |
文件目录有结构,但整体无结构 | 整体结构严密,还提供系统的数据安全性、并发控制等能力 |
共享性差、冗杂度大,独立性差 | 共享性好、冗杂度大小,高度物理独立和逻辑独立性 |
文件管理系统数据特点:
-
数据可以长期保存
-
由文件系统管理数据
-
数据共享性差,冗余度大、独立性差
联系:
-
二者都是计算机系统管理数据的软件
-
文件系统是操作系统的重要组成部分,虽然DBMS是独立操作系统的软件,但底层都是通过文件系统实现的
4.举出适合用文件系统而不是数据库系统的应用例子,以及适合用数据库系统的应用例子。
-
手机小型程序都是文件管理,功能简单固定的系统适用于文件系统。
-
而企业部门系统几乎都是数据库系统,称为信息系统的基础和核心
5.试述数据库系统的特点。
-
数据结构化
-
数据共享性高,冗余度低,易扩充
-
数据独立性高(物理独立性和逻辑独立性)
-
数据由DBMS统一管理和控制
6.数据库管理系统的主要功能有哪些?
-
数据库定义功能
-
数据组织、管理和存储功能
-
数据操纵功能
-
数据库的事务管理和运行管理
-
数据库的建立和维护功能
-
其他功能
7.什么是概念模型?试述概念模型的作用。
概念模型:现实世界到机器世界的一个中间层次
作用
-
用于信息世界的建模
-
数据库设计的有力工具
-
设计人员和用户进行交流的语言
8.定义并解释概念模型中以下术语: 实体,实体型,实体集,实体之间的联系
实体:客观存在并可以相互区分的事物
实体型:用实体名及其属性名集合来抽象和刻画同类实体
实体集:同类实体的集合
实体之间的联系:包括实体内部的联系和实体之间的联系。内部联系指的是实体各属性之间的联系,实体之间的联系指的是
9.试述数据模型的概念、数据模型的作用和数据模型的三个要素。
-
数据模型(Data Model)是数据特征的抽象,它从抽象层次上描述了系统的静态特征、动态行为和约束条件
-
数据模型是数据库用来对现实世界进行抽象的工具,是数据库中用于提供信息表示和操作手段的形式构架。
-
数据模型通常由数据结构、数据操作和完整性约束三部分组成
10.试述层次模型的概念,举出三个层次模型的实例。
-
满足下面两个条件的基本层次联系的集合称为层次模型
-
有且只有一个结点没有双亲结点,这个结点称为根结点
-
根以外的其他结点有且只有一个双亲结点
-
-
行政机构、行政区域、学校层次……
11.试述网状模型的概念,举出三个网状模型的实例。
-
满足下面两个条件的基本层次联系的集合称为层次模型
-
允许一个以上的结点无双亲
-
一个结点可以有多于一个的双亲
-
12.试述网状、层次数据库的优缺点。
-
层次数据库
-
优点
-
数据结构更加简单清晰
-
查询效率高
-
良好的完整性支持
-
-
缺点
-
现实世界中许多联系是非层次性的
-
用户必须知道数据库的层次结构
-
-
-
网状数据库
-
优点
-
直接描述现实世界
-
良好的性能,存储效率高
-
-
缺点
-
结构复杂
-
数据定义语言、数据操纵语言比较复杂
-
-
13.试述关系模型的概念,定义并解释以下术语: 关系,属性,域,元组,码,分量,关系模式
-
关系:一个关系对应通常说的一张表
-
属性:表中的一列即为一个属性
-
域:属性的取值范围
-
元组:表中的一行即为一个属性
-
码:表中的某个属性组,可以唯一确定一个元组
-
分量:元组中的一个属性值
-
关系模式:对关系的描述,一般表示为关系名(属性1,属性2……)
14.试述关系数据库的特点。
-
优点
-
严格的数据基础
-
关系模型的概念单一
-
存取路径对用户透明,从而有更高的数据独立性
-
-
缺点
-
查询效率低
-
15.试述数据库系统的三级模式结构,并说明这种结构的优点是什么。
三级模式结构:外模式、内模式、模式组成
-
外模式——局部数据的逻辑结构和特征描述,是数据库用户的数据视图
-
模式——数据库中全体数据的逻辑结构和特性的描述,是所有用户的公共数据视图
-
内模式——数据在数据库系统内部的表示,对数据的物理结构和存储方式的描述
具有两级映像,外模式/模式映像,模式/内模式映象,使得数据库系统中的数据具有较高的逻辑独立性和物理独立性
16.定义并解释以下术语: 模式,外模式,内模式,数据定义语言,数据操纵语言
-
数据定义语言:用来定义数据库模式、外模式和内模式的语言
-
数据操纵语言:用来对数据库的数据进行查询、插入、删除和修改的语言
17.什么叫数据与程序的物理独立性?什么叫数据与程序的逻辑独立性?为什么数据库系统具有数据与程序的独立性?
-
数据与程序的物理独立性:数据库的存储结构改变了(内模式改变),让内模式与模式映射进行改变,从而模式不变,应用程序不变
-
数据与程序的逻辑独立性:数据库的逻辑结构发生改变时(模式发生改变),只需改变模式与外模式的映射,就可以保持外模式不变,应用程序不变
18.试述数据库系统的组成。
数据库、数据库管理系统、应用系统、数据库管理员和用户组成
19.试述数据库管理员、系统分析员、数据库设计人员、应用程序员的职责。
-
数据库管理员
-
决定数据库的信息内容和结构
-
决定数据库的存储结构和存取策略
-
定义数据的安全性要求和完整性约束条件
-
监控数据库的使用和运行
-
数据库系统的改进和重组重构
-
-
系统分析员
-
负责应用系统的需求分析和规范说
-
-
数据库设计人员
-
负责数据库中数据的确定和数据库各级模式的设计
-
选择:
1.数据模型是数据库系统的核心和基础
2.实现将现实世界抽象为信息世界的是概念模型
3人工管理系统相比于文件系统的显著优势是数据可以长期保存
4.能够保证数据库系统中的数据具有较高的逻辑独立性的是外模式/模式映像
5.IBM公司的IMS数据库管理系统采用的数据模型是层次模型
6.DBMS是一类系统软件,他是建立在操作系统之上
7.网状数据库说法正确的是一个结点可以有多于一个的双亲
8.从逻辑模型到物理模型的转换一般由DBMS完成的
9.长期存储在计算机内,有组织的、可共享的大量数据的集合是数据库
10.数据管理技术发展过程中,需要应用程序管理数据的是人工管理阶段
判断:
-
文件管理阶段,数据独立性还是比较差的
-
外模式是模式的子集,因为一个是局部抽象一个是全体抽象
-
数据库系统由DB(数据库)、DBMS(数据库管理系统)、应用系统、DBA(数据库管理人员)。数据库管理系统是部分
-
在数据模型的组成要素中,数据结构是刻画一个数据模型性质最重要的方面,人们通常按照数据结构的类型来命名数据模型
-
数据库系统的三级模式是对数据进行抽象的3个级别,把数据的具体组织留给DBMS管理
-
网状结构是一种比层次模型更具有普遍性的结构
填空
-
数据库系统的逻辑模型是按照计算机的观点对数据建模,主要包括层次模型、网状模型、关系模型
-
最经常使用的概念模型是E-R模型
-
数据独立性是数据库领域的重要概念,包括数据的物理独立性和逻辑独立性
-
数据库系统的三级模式结构是指数据库系统是由外模式和内模式和模式组成的
-
两个实体型之间的联系可以分为三种:一对一联系、多对多联系、一对多联系
-
数据库管理系统提供的数据控制方面的功能包括数据的安全性保护、数据的完整性检查、并发控制和数据库恢复
-
数据库三级模式结构中,通常描述局部数据的逻辑结构和特征的是外模式
-
层次模型和网状模型中的单位是基本层次联系,这是指两个记录型以及它们之间的一对多的联系
-
数据模型的组成要素中描述系统的静态特征和动态特征的分别是数据结构和数据操作
1.试述关系模型的三个组成部分
关系数据结构、关系操作集合、关系完整性约束
2.简述关系数据语言的特点和分类
关系代数语言、关系演算语言、关系代数和关系演算双重特点的语言
3.定义和理解下列术语
-
域:是一组具有相同数据类型的值的集合
-
笛卡尔积:给定一组域,允许其中某些域是有相同的
-
关系在域上笛卡尔积的子集称为关系
-
元组:关系中每个元素是关系中的元组
-
属性:关系是一个二维表,表中的每一列对应一个域,每行对应一个元组。对每一列取得名字称为属性
-
候选码:若关系中的某一个属性组的值能够唯一地标识一个元组,而其子集不能,该属性称为候选码
-
主码:若一个关系有多个候选码,则选定其中一个为主码
-
外码:若一个表的属性与另外一个表的主码相关,则称这个表的属性是另外一个表的外码
-
关系模式:关系的描述
-
关系 :关系是关系模式在某时刻的状态或内容
-
关系数据库:关系数据库的型称为关系数据库模型;关系数据库的的值是这些关系模型在某一时刻对应的关系的集合
4.关系模式和关系的区别
关系模式是型,关系是值,是关系模式的实例
5.试述关系模型的完整性规则。在参照完整性中,什么情况下外码属性的值可以为空值?
关系模型中可以有三类完整习惯约束:
-
实体完整性——主属性的值不能为空
-
参照完整性——外码的值必须是关联主码的值或者为空。
-
用户定义的完整性——反映某一具体应用所涉及的数据必须满足的语义要求
6、试述等值连接与自然连接的区别和联系
自然连接时一种特殊的等值连接,它要求两个关系中进行比较的分量,即连接属性必须是相同的属性组,并且要在结果中去掉一个的重复属性
7、代数的基本运算有哪些,如用这些基本运算来表示其他运算?
基本运算:并、差、笛卡尔积、投影和选择
其他运算:交、连接、除
选择:
-
一个列的值不可以来自不同的域
-
候选码可以唯一地标识一个元组
-
关系操作中,操作的对象和结果都是集合
-
自然连接会只保留一方的相同属性,而等值都会保留
(A,B),(B,C),自然为3,等值为4列
判断:
-
关系模型的特点是 实体以及实体之间的联系都可以使用相同的结构类型来表示 √
-
关系模型中,非主属性的不可能出现在任何候选码中 √
-
在左外连接中,保留的是左边关系中所有的元组 √
-
关系模型 是对关系的描述,关系是关系模式在某一时刻的状态或内容 √
关系模型的特点:
-
建立在数学基础上
-
关系模型的概念单一,无论实体或实体之间的联系都用关系表示
-
存取路径对用户透明
-
关系必须是规范化的关系
填空:
关系模型中,关系操作包括增删查改。
以外码作为主码的关系称为 被参照关系 ;外码所在的关系称为参照关系。
被参照关系与 参照关系是通过外码相联系的,这种联系通常是一对多的联系。、
问答
1.解释候选码和主码以及他们之间的关系
关系的某一个属性组的值唯一标识一个元组,该属性组称为候选码;如果一个关系有多个候选码,其中一个 被选为主码。候选码可以有多个,主码是其中的一个
2.说明什么是关系完备性?关系演算在语言表达能力上是完备的吗?
关系完备性是指一个查询语言能够表示关系代数可以表示的所有查询。关系演算具有完备性
1.试述SQL的特点
-
综合统一,DDL(数据定义)+DML(数据操纵)+DCL(数据控制)
-
高度非过程化
-
面向集合的操作方式
-
以同一种语法结构提供两种使用方式
-
语言简洁,易学易用
2.说明删除表时,restrict、cascade的区别
restrict表示删除是有限制,不能被其他表的约束条件所限制,如果存在依赖表的对象,则表不能被删除。
cascade表示删除表没有限制,存在的依赖对象也会被删除
3.什么是基本表?什么是视图?两者的区别和联系是什么?
基本表是本身独立存在的表,在SQL中一个关系就对应一个基本表。视图是从一个或几个基本表导出的表,是一个虚表。数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。视图在概念上与基本表等同,用户可以如同基本表那样使用视图,可以在视图上再定义视图。
选择
1.SQL是非过程化的语言,用户无需指定存放路径
2.对表中数据继续删除操作的是DELETE,DROP常常是对于表的删除
3.数据中建立索引的目的是为了加快存取速度
4.视图是数据库系统三级模式的外模式
(外模式是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是某一应用有关的数据的逻辑表示,外模式是保证数据库安全性的一个有力支持,通过视图每个用户只能看见和访问所对应的外模式中的数据,而数据库中的其余数据是不可见的)
5.基本表和视图不都是存储数据——视图不存储数据,是一个虚表
判断题
1.视图不仅可以从单个表导出,还可以从多个基本表导出 √
2.不是所有的视图都可以进行更新,但是视图都可以进行插入 ❌ 视图的操作有一定的限制,不一定是全部
3.select 子句的目标列可以是表中的属性也可以是表达式 √
4.在sql语句中,表达某个属性X为空,可以使用WHERE X =NULL ×(没有这样的语法,使用的是x is null)
5.SQL语言中,逻辑运算符AND和OR的优先级是一样的 ×
6.使用ANY或ALL谓词时必须与比较运算符同时使用 √
填空
-
SQL语言具有数据定义、数据查询、数据操纵、数据控制的功能
-
SQL消除重复的关键词是RESTRICT
-
若一个视图是从单个基表导出的,并且去掉了基本表的某些列,但保留了主码,这类视图称为 行列子集视图
-
SQL语言的数据定义功能包含 模式定义、表定义、视图定义和索引定义
相关子查询和不相干子查询
在嵌套查询中,如果子查询的查询条件不依赖父查询,称为不相关子查询,否则称为相关子查询
简答题
1.什么是数据库的安全性
数据库的安全性指的是保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏
2.实现数据库安全性控制的常用方法和技术
-
用户身份鉴别——系统提供多种方式让用户标识自己的身份或名字,鉴定后可以使用数据库
-
多层存取控制——系统提供用户权限定义和合法权限检查功能,用户只能获得某种权限才能访问数据库的数据
-
视图机制——为不同的用户定义不同的视图
-
审计:——建立审计日志,把用户对数据库的所有操作自动记录下来
-
数据加密——对传输和存储的数据进行加密处理
3.什么是数据库中的自主存取控制方法和强制存取控制方法?
自主存取控制方法:定义各个用户对不同数据对象的存取权限——(可以自主把拥有的权限授予别人)
强制存取方法:每个数据对象被强制标以一定的密级,每个用户也被授予一个级别的许可证
4.理解MAC机制中主题、客体、敏感度标记的含义
主体是系统中的活动实体,既包括了DBMS所管理的实际用户,也包括代表用户的各进程。
客体是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等
敏感度(绝密,机密,可信,公开)
主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级
5.什么是数据库的审计功能,为什么要审计功能?
审计功能是指DBMS的审计模块在用户对数据库执行操作的同时,把所有操作自定记录到系统的审计日志中。
因为任何系统的安全保护措施都不是完美无缺的,蓄意盗窃破坏数据的人总可能存在。利用数据库的审计功能,可以根据审计日志记录的信息,分析和重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容
6.系统的存取规则
-
仅当主体的许可证级别大于或等于客体的密级时才能读取相应的客体
-
仅当主体的许可证小于等于客体的密级才能写相应的的客体
选择题
1.强制存取控制策略是TCSEC/TDI是哪一级安全级别的特色——B1
自主存取控制策略属于——C2
2.SQL的GRANT和REVOKE语句用来实现自主存取控制
3.在强制存取控制机制中,当主体的许可级别等于客体的密级时,主体可以对客体进行如下操作——读取、写入
填空题
1.在数据加密技术中,原始数据通过某种加密算法变换为不可直接识别的格式,称为密文
2.数据库角色实际是一组与数据库操作相关的各种权限
3.在对用户授予列INSERT权限时,一定要包含对主码的INSERT权限,否则用户的插入会因为空值而被拒绝。出了授权的列,其他列的值获取空值、默认值
1.什么是数据库的完整性 ?
数据库的完整性是指数据的正确性和相容性
2.数据库的完整性概念与安全性概念有什么区别和联系
数据的完整性和安全性是两个不同的概念,但是有一定的联系。前者是为了防止 数据库存在不符合语义的数据,防止错误信息的输入和输出,即垃圾进垃圾出;后者是保护数据库防止恶意的破坏和非法存取。
安全性措施的防护对象是非法用户和非法操作
完整性的防范对象是不合语义的数据
3.什么是数据库的完整性约束性条件
完整性约束条件是指数据库的数据应该满足的语义约束条件
4.DBMS的完整性控制机制
定义功能(定义约束条件)、检查功能(检查是否违反)、违约处理功能(违反后的处理)
5.在关系系统中,当操作违反实体完整性、参照完整性和用户自定义的完整性约束条件时,一般分别进行哪些处理?
对于违反实体完整性和用户定义的完整性的操作一般采用拒绝执行的方式进行处理;而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时根据应用语义执行一些附加操作,保证数据库的正确性
选择题
1.定义关系的主码意味着主码属性唯一且不为空
2.
3.使用ALTER TABLE ADD CONSTRAINT 可以增加基于元组的约束
填空
在CREATE TABLE时,用户定义的完整性可以通过NOT NULL、UNIQUE、CHECK等子句实现。
(参照完整性可以通过FOREIGN KEY,实体完整性通过PRIMARY KEY实现)
使用外码的时候,当删除主键所在的表时,系统可以采取的策略是拒绝执行、级联删除、设为空值
定义数据库完整性一般是由SQL的DDL语句来实现
第七章
1.数据库设计过程
-
需求分析
-
概念结构设计
-
逻辑结构设计
-
数据库物理设计
-
数据库实施
-
数据库运行和维护
2.试述数据库设计过程中形成的数据库模式
概念结构设计阶段——E-R图
逻辑结构设计阶段——建立数据模型.视图.生成DMBS支持的数据模型 等等
物理结构设计阶段——物理存储安排.索引
3.需求分析阶段的设计目标是什么?调查的内容是什么?
目标:详细调查现实世界要处理的对象,充分了解原系统工作概述
内容:信息要求.处理要求.安全性与完整性要求
4.数据字典的内容和作用是什么
数据字典内容:数据项、数据结构、数据流、数据存储和处理过程
数据字典的作用:数据字典是关于数据库中数据的描述,在需求分析阶段建立,是下一步进行概念设计的基础,并在数据库设计过程中不断修改、充实和完善。
选择
-
数据库外模式是在数据库逻辑结构阶段 设计的
-
生成DBMS系统支持的数据模型在数据库逻辑结构设计完成的
-
根据应用需求建立索引是在数据库物理设计完成的
填空
-
数据库设计方法包括 新奥尔良法,基于E-R模型方法,3NF的设计方法,面向对象的设计方法,统一建模语言
-
数据库设计的基本步骤包括需求分析,概念结构设计,逻辑结构设计,物理结构设计,数据库实施,数据库运行和维护
-
集成局部E-R图分为两个步骤,分别是合并 修改和重构
-
数据库常见的存取方法主要有Hash方法,索引,聚簇
填空
-
嵌入式SQL语句中为了和主语言语句进行区分,在SQL语句前加前缀EXEC SQL,以分号结束
-
主变量可以附加一个指示变量,指示变量可以表示输入主变量是否为空值
-
SQL是面向集合的,主语言是面向记录,可以使用游标解决这一问题
-
存储过程经过编译,优化之后存储在数据库服务器中
-
应用程序中访问和管理数据库的方法有OLEDB,嵌入式SQL,PL/SQL,ODBC,JDBC