数据库及其应用

第1章SQL基本语言

1.1 SQL数据的定义

1.1.1 数据库的建立和删除

  • 建数据库
CREATE DATABASE database_name
/*此处省略路径、文件长度等等参数*/
  • 创建:CREATE TABLE / VIEW / INDEX
  • 删除:DROP TABLE / VIEW / INDEX
  • 修改:ALTER TABLE

1.1.2 基本表的建立和删除

  • 定义基本表
CREATE TABLE <表名>
(<列名><数据类型>[完整性约束]No CHAR(5) PRIMARY KEY                       /*name_No为主键,自然不能为空*/Name CHAR(20) NOT NULL                       /*不能为空值*/Birthday DATE,              Grade INT CHECK(GRADE>=60 AND GRADE<=100),   /*删除时需要点开资源管理器中查看约束,复制其值*/CONSTRAINT tablename2_tablename1 FOREIGN KEY(Name) REFERENCE tablename1/*外部约束条件,Name约束为table_name1中Name*/......
)
  • 所有数据类型:
  1. TINYINT 1字节
  2. SMALLINT 2字节
  3. INT/INTEGER 4字节
  4. DECIMAL(p,s) p为数字长度,s为小数位数
  5. REAL 4字节
  6. FLOAT
  7. NCHAR(n) 最大长度为n的长字符串,占用2n字节
  8. NVARCHAR(n)
  9. DATETIME/DATE 系统默认时间MM-DD-YYYY HH:MM:AM/PM
  10. TIMESTAMP 系统自动记录时间的类型8字节
  • 向表中添加元组
INSERT INTO <表名>
VALUES('','',123...)
  • 修改基本表
ALTER TABLE <表名>
ADD <新列名><数据类型>[完整性约束]
DROP CONSTRAINT [完整性约束名]
ALTER COLUM <列名><数据类型>

1.1.3 删除与建立索引

  • 建立索引
CREATE [UNIQUE] [CLUSTERED] INDEX <索引名>
ON <表名>(<列名>[<排序方式ASC|DESC>],...)
/*UNIQUE为唯一索引,不允许相同键值(多个NULL会被视为重复值)*CLUSTERED为聚集索引,键值的逻辑顺序是基本表中对应的物理顺序*若已经定义了主键,那么就无法创建聚集索引*/
/*排序方式分为两种:默认ASC(升序),DESC(降序)*/
  • 删除索引
DROP INDEX <表名.索引名>

1.2 SQL的数据查询

SELECT [ALL|DISTINCT]<目标列表达式>               /*DISTINCT表示不同值*//*目标列表达式可以是函数、字符串常量、算术表达式等*/
FROM <表名或视图名>
[WHERE <条件表达式>]                            /*不一定需要*/
[GROUP BY <列名1>[HAVING <条件表达式>]]
[ORDER BY <列名2>[ASC|DESC]]

1.2.1 简单的选择与投影查询

  • 无条件查询
SELECT *                                        /*'*'表示所有列*/
SELECT YEAR(Birthday) BirtYear                  /*若只有函数则结果无列名*/
  • 条件查询
名称 运算符 注释
比较运算 =,<,>,!=… 等于,大于,小于
谓词 BETWEEN AND , NOT BETWEEN AND
IN , NOT IN
LIKE , NOT LIKE
IS NULL , IS NOT NULL
介于两者之间,不在其中
在其中,不在其中
匹配,不匹配
是空值,不是空值
逻辑运算 NOT , AND , OR 非,与,或
集函数 COUNT(*) , COUNT(列名) , SUM(列名) ,
AVG(列名) , MAX(列名) , MIN(列名)
统计元组个数,统计列值格式,列值汇总,
求列值平均,求列值最大/最小
/*查询年龄在18到22岁的学生的学号、姓名、年龄*/
SELECT Sno,Sname,DATENAME(YYYY,GETDATE())-YEAR(Birthday) Age
FROM Students
WHERE DATENAME(YYYY,GETDATE())-YEAR(Birthday)>=18 AND DATENAME(YYYY,GETDATE())-YEAR(Birthday)<=22
/*DATENAME(mm/dd/yyyy,GETDATE())是获取系统当前月、日、年的方法*/
  • 匹配串(LIKE)
    '%‘表示任意长度的字符(可为0),’_'表示任意单个字符
[NOT] LIKE '<匹配串>' [ESCAPE'<转码字符>']
SELECT Sname,Sno,Ssex,Scourse
FROM Students
WHERE Sname LIKE '刘_'                      /*姓名两字,开头为刘*/
AND Sno NOT LIKE '%0'                       /*学号不以0结尾*/
AND Scourse LIKE 'DB\_设计' ESCAPE '\'
AND Ssex IS NOT NULL
/*此处自定义'\'为转码字符,防止'_'被解释为通配符*/
  • 查询结果排序
/*在Reports表中查询选了C03课程的学生,并以成绩降序排序*/
SELECT Sno,Grade
FROM Reports
WHERE Cno='C03'
ORDER BY Grade DESC
  • 集函数的使用
/*查询选修了课程的人数和该课程的平均分*/
SELECT Cno,COUNT(DISTINCT Sno) Number,AVG(Grade) Average_Grade
From Reports
GROUP BY Cno
  • 查询结果分组
/*查询选修了3门或3门以上课程的学生学号*/
SELECT Sno
FROM Reports
GROUP BY Sno
HAVING COUNT(Cno)>=3
/*先按照Sno分组,再执行COUNT函数进行统计*/
/*WHERE作用于基本表或视图,HAVING作用于组*/

1.2.2 链接查询

  • 不同表的连接查询
/*查询每个学生及其选修情况*/
SELECT FROM Students.*,Reports.*
FROM Students,Reports
WHERE Students.Sno=Reports.Sno
/*结果出来会存在单个学号多组的情况(数量为选课的多少),且存在两列Sno*/
/*改进*/
SELECT Students.Sno,Snmae,Sex,Birthday,Dno,Cno,Grade
FROM Students,Reports
WHERE Students.Sno=Reports.Sno
/*Sno是共有属性,所以需要前缀<表名.>进行区分*/
  • 自身连接查询
/*查询每一门课的间接先修课*(先修课的先修课*/
SELECT A.Cno,A.Cname,B.Pre_Cno,C.Cname
FROM Courses A,Courses B,Courses C
WHERE A.Pre_Cno=B.Cno AND B.Pre_Cno=C.Cno
/*结果中出现的NULL表示该课程没有先修课*/
  • 外连接
    外连接分为左连接和右连接。在连接条件的左(右)边加上’*’,就分别表示右(左)连接。
SELECT Students.Sno,Sname,Ssex,Birthday,Dno,Cno,Grade
FROM Students,Reports
WHERE Students.Sno=Reports.Sno(*)

似乎外连接符号’*'为其所在一端的表加上了全为空值NULL的“万能行”,它可以与另一边的表中所有不满足的连接条件的元组进行连接。


1.2.3 嵌套查询

  • 带谓词IN的嵌套查询
/*查询选修了C02课程的学生姓名和所在系别编号*/
SELECT Sname,Dno
FROM Students
WHERE Sno IN
(SELECT SnoFROM ReportsWHERE Cno='C02'
)

本例括号内为子查询,外层的为父查询,注意:子查询的SELECT语句不能使用ORDER BY语句。嵌套查询的求解方法是由里向外处理,先执行子查询,再执行父查询,即子查询的结果为父查询的查找条件

可以将子查询的结果理解为元组的集合,而父查询则是在其中进行搜索。

本例的子查询只执行一次,结果用于父查询;子查询的条件不依赖于父查询,这类子查询称为不相关子查询,是最简单的一类子查询。

  • 带有比较运算符的嵌套查询

确切知道子查询返回的是单值时,可用比较运算符(>,<,=,>=,<=,=,!=,<>)

  • 带谓词ANYALL的嵌套查询
谓词 注释 谓词 注释
ANY 某个值 ALL 所有值
/*查询系别编号不是D01且年龄不超过D01系的所有学生的年龄的学生姓名*/
SELECT Sname
FROM Students
WHERE Dno!='D01' AND YEAR(Birthday)<=ALL (SELECT YEAR(Birthday)FROM StudentsWHERE Dno='C01')

但是一般来说,用集函数实现子查询通常比用ANY或ALL查询效率更高。

  • 带谓词EXISTS的嵌套查询

带谓词EXISTS的子查询不返回任何数据,只产生TRUE或FALSE,所以子查询目标列属性可用*号表示(不会给出具体列名)。

/*查询所有选修了编号为C01课程的学生姓名和所在系别编号*/
SELECT Sname,Sno
FROM Students
WHERE EXISTS
(SELECT *FROM ReportsWHERE Sno=Students.Sno AND Cno='C01'
)

处理过程:

  1. 取外层查询表中的第一个元组,根据它与内层子查询相关的属性值(Sno)处理内层子查询。
  2. 若WHERE返回为TRUE,则此元组放入结果表。
  3. 再取(Students)表的下一个元组。

此类查询为相关子查询,子查询的条件依赖于附条件的某个属性值。

一些带EXISTS谓词的子查询不能被其他形式的子查询等价替换,但所有带IN、比较运算符、ANY和ALL的子查询都能用带EXISTS谓词的子查询替换

  • 集合查询
    集合的UNION(并){A∩BA\cap BA∩B}

    集合的INTERSECT(交){A∪BA\cup BA∪B}

    集合的EXCEPT(差){A−BA-BA−B}

/*查询系别编号为D02的学生或年龄不大于20岁的学生信息*/
SELECT *
FROM Students
WHERE Dno='D02'
UNION
SELECT *
FROM Students
WHERE DATENAME(yyyy,GETDATE())-YEAR(Birthday)<=20

1.3 SQL的数据更新

1.3.1 插入数据

INSERT
INTO <表名> [属性列]
SELECT 子查询语句
/*将Students表种所有元组插入History_Students表中*/
INSERT 
INTO History_Student
SELECT *
FROM Students

1.3.2 修改数据

UPDATE <表名>
SET <列名1=表达式1>[...]
[WHERE <条件>]
/*将系别编号为D01的所有学生的成绩置0*/
UPDATE Reports
SET Grade=0
WHERE 'D01'=
(SELECT DnoFROM SudentsWHERE Students.Sno=Reports.Sno
)

1.3.3 删除数据

DELETE
FROM <表名>
[WHERE <条件>]
/*删除系别编号为D03的所有学生的选课记录*/
DELETE
FROM Reports
WHERE 'D03'=
(SELECT DnoFROM StudentsWHERE Reports.Sno=Students.Sno
)

注意:有关参照表的相关元组必须一起删除。如S01退学,需要再Students表和Reports表中同时删除有关元组,否则会引起数据库不一样的问题。


1.4 SQL的视图

1.4.1 定义视图

  • 建立视图
CREATE VIEW <视图名>[(<列名>...)]
AS <SELECT子查询语句>
[WITH CHECK OPTION]

注意:

  1. <SELECT子查询语句>可以任意复杂,但通常不允许含有ORDER BY子句和DISTINCT短语。
  2. WITH CHECK OPTION 表示用视图进行UPDATE、INSERT、DELETE操作时要保证更新、插入、删除的元组满足视图定义的谓词条件(子查询的条件表达式)。
  3. 若省略列属性,则隐含为该视图由子查询目标列组成,但以下3中种情况必须只当组成视图的所有列名:

    (1) 目标列不是单纯的属性名,而是集函数或列表达式

    (2) 多表连接时的同名列

    (3) 取新名字

/*建立系别编号为D03的学生视图,要求进行操作时仍需保证只有D03的学生,视图的属性名为Sno,Sname,Birthday,Dno*/
CREATE VIEW C_StudentASSELECT Sno,Sname,Birthday,DnoFROM StudentsWHERE Dno='D03'WITH CHECK OPTION
/*建立学生学号、姓名、选修课程名、成绩的视图*/
CREATE VIEW Student_CRASSELECT Students.Sno,Sname,Cname,GradeFROM Students,Courses,ReportsWHERE Students.Sno=Reports.Sno AND Courses.Cno=Reports.Cno

带表达式的视图,含有表达式那列称为虚拟列

  • 删除视图
DROP VIEW <视图名>

注意:此视图从数据字典种被删除,但是由此视图导出的其他视图定义仍在数据字典种,由于此视图已失效,所以要用DROP VIEW语句一一删除这些视图。


1.4.2 查询视图

视图被定义后,可以像基本表一样使用视图

/*在系别编号为D03的学生视图C_Student中找出年龄<20的学生姓名和年龄*/
SELECT Sname,DATENAME(yyyy,GETDATE())-YEAR(Birthday) Sage
FROM C_Student
WHERE DATENAME(yyyy,GETDATE())-YEAR(Birthday)<20

DBMS将视图的查询转化为基本表的查询再进行这个经过修正的查询


1.4.3 更新视图

通过INSERT、UPDATE、DELETE操作进行更新。(最终转化为对基本表的更新)

/*向D03的学生视图C_Student中插入一个新的学生记录,其中学号为S09,姓名为‘王海’,出生日期为1998-05-16,系别为D02*/
INSERT
INTO
VALUES('S09','王海','1998-05-16','D02')
/*由于是WITH CHECK OPTION D03,所以插入失败*/
/*但若无WITHE CHECK OPTION,则成功插入到Student表中,但在该视图中无法显示,因为该学生系别编号为D02*/

视图只有满足以下两个条件才能更新:

  1. 视图从单个基本表使用选择和投影导出
  2. 该视图的属性包含了基本表的一个候选键(不重复且不为NULL)

1.5 SQL的数据控制

1.5.1 授权

SQL通过***GRANT***语句向用户授予操作权限,一般格式为:

GRANT <权限>
ON <对象类型> <对象名>(属性名)
TO <用户>
[WITH GRANT OPTION]/*获得该种权限的用户可将此权限再授予其他用户*/
对象 对象类型 操作权限
属性列与视图 TABLE SELECT,INSERT,UPDATE,DELETE,ALL PRIVILEGES
基本表 TABLE SELECT,INSERT,UPDATE,DELETE,ALTER,INDEX,ALL PRIVILEGES
数据库 DATABASE CREATETAB(建立表)

注意: 经过CREATETAB的权限授予后,该用建立基本表,并成为该表的属主(owner),并对此表有一切的操作权限。

/*把查询Students表的SELECT权限和修改学生姓名(Sname)的权限给用户1,并允许其给其他用户授权*/
GRANT UPDATE(Sname),SELECT
ON Students
TO User1
WITH GRANT OPTION

1.5.2 收回权限

向用户授予的权限可以由DBA或其授权者用REVOKE语句收回,REVOKE语句的一般格式为

REVOKE <权限>
ON <对象类型> <对象名>
FROM <用户>
/*把对用户1修改学生姓名的权限收回*/
REVOKE UPDATE(Sname)
ON Students
FROM User1

注意: 回收权限的操作会级联,即若User1给了User2权限,之后回收了User1的该权限,那么User2的该权限也被回收;但若User2从别的地方获得了该权限,那么系统只是回收User1授权给User2的该权限,而不影响User2从别的地方获得的该权限,即User2还可正常使用该权限。


1.6 嵌入式SQL

待定!


第2章数据库管理与数据库

2.1 数据库的常用术语

2.1.1 数据与信息

  • 数据、数据处理与数据管理

    • 数据 是对现实世界的抽象表示,是描述客观事物特征或性质的某种符号。

      • 记录名 类似于表名。
      • 记录型 称为记录的逻辑结构(表头)。
      • 字段 每一列就是一个字段(属性列)。
      • 记录 每一行就是一条记录(元组),也是数据。
    • 数据处理 是对各种已有数据进行各种数学运算和统计加工的过程。
    • 数据管理 是对数据进行收集、整理、组织、编码、存储、检索和传输等一系列操作的总称,是数据处理的前提和中心问题。因此可将数据处理看作数据管理的一部分。
  • 信息与数据的关系

    • 信息 是对现实世界各种客观事物之间相互联系,相互作用的运动状态和特征的抽象描述,是数据处理的结果,且仍以数据的形式表示出来,即***数据是信息的载体,信息是数据的处理结果,是数据的内涵。***

    信息=数据+数据处理

数据是输入;信息是输出;数据处理的真正含义是为产生信息而处理数据。

  • 具体而言的数据与信息的区别与联系:
  1. 数据是客观事物特征或性质的某种符号。
  2. 数据是载荷信息的物理符号,或称为载体。
  3. 数据能表示信息,但并非任何数据都是信息。
  4. 信息是数据处理的结果,是人们能够理解的、由决策价值的数据。

2.1.2 数据独立性

  • 物理独立性 是指用户的应用程序与存储在磁盘上的数据库种的数据是相互独立的,即当数据的物理存储位置或者物理结构发生改变时,用户的应用程序不用改变。
  • 逻辑独立性 是指用户的应用程序与数据库的全局逻辑结构是相互独立的,即当数据的全局逻辑结构改变时,用户的应用程序不用改变。

2.1.3 数据库系统

  • 数据库(DB)是长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的个数据模型组织、描述和储存,具有最小的冗余度、较高的独立性和易扩展性,并可为各种用户共享。
  • 数据库管理系统(DBMS)是位于用户与操作系统(OS)之间的一层数据管理软件,负责对数据库进行统一的管理和控制,并为用户和应用程序提供访问数据库的方法。
  • 数据库系统(DBS)是计算机系统、DB、DBMS、应用软件、数据库管理员和用户的集合。所以数据库系统一般由硬件、软件(包括开发工具)、数据库集合、数据库管理员构成。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JYMlbyT7-1648278533873)(/picture/DBMS.png)]


2.2计算机数据管理技术的产生和发展

2.2.1 人工管理阶段

特点:

  • 数据不保存
  • 人工(程序员)管理数据
  • 数据不共享:数据共享指多个用户、多种语言、多个应用程序相互覆盖地使用一些共同的数据集合。
  • 数据不具有独立性

2.2.2 文件系统阶段

特点:

  • 数据可以长期保存
  • 文件的多样化和结构化
  • 文件系统管理数据

缺点:

  • 数据冗余度大
  • 数据独立性差
  • 数据联系弱:指不同文件中的数据联系弱;但其单个文件内的数据有着紧密的逻辑联系

2.2.3 数据库系统阶段

特点:

  • 数据的整体结构化(不同文件的数据间的联系有了)
  • 数据独立性高
  • 数据的共享性高,冗余度低,易扩充
  • 提供了完整的控制功能
    1. 数据的安全性保护
    2. 数据的完整性
    3. 并发控制
    4. 数据库的恢复

2.2.4 数据库技术的发展

  • 第一代数据库技术:即层次数据库和网状数据库,其主要特点为:

    1. 支持三级模式的结构
    2. 用存取路径(指针)表示数据之间的联系
    3. 数据定义语言(DDL)和数据操纵语言(DML)相对独立
    4. 数据库语言采用过程性语言
  • 发展经历:

    1. 1964年,世界上第一个DBMS——IDS系统(网状)
    2. 1969年,世界上第一个商品化DBMS产品——IMS(层次)
    3. 1969~1970年,提出DBTG报告,建立了以网状数据模型为基础的数据库管理系统概念
  • 第二代数据库:即关系数据库,具有严格的数学理论基础,其主要特点为:

    1. 概念单一化,数据及其数据间的联系都用关系进行表示
    2. 以关系代数为理论基础,数据独立性强
    3. 采用说明性语言,简化用户编程难度
  • 发展经历:

    1. 1970年,提出关系数据模型,奠定关系模型理论基础
    2. 1974年,成功研制System R,是世界上最早的、功能最强大的关系数据库管理系统
    3. 1980年后,RDBMS的产品迅速推出,如Oracle、Informix、Sybase、dBase、FoxBASE、FoxPro等
    4. 1990年后,支持分布式数据库,同时实现了开放式网络环境下异质数据库的互联操作,以及在企业范围内的联机事务处理(OLTP应用支持)
  • 第三代数据库管理系统:如Object Store、ONTOS、O2、Bb4o等严格支持面向对象的数据模型;后来发展成了对象关系数据库系统如Oracle、DB2


2.2.5 数据库技术的主要研究领域

  • 数据库管理系统软件的研制
  • 数据库应用系统设计与开发
  • 数据库理论

2.3数据模型

2.3.1 数据模型的构成

  • 数据结构:是对计算机的数据组织方式和数据之间联系进行框架性描述的集合,是对数据库的静态描述。一类是记录型;另一类是与数据之间联系有关的对象,如关系模型中的外键。
  • 数据操作:是数据库中各种对象类的实例(或取值)所允许执行的操作的集合,包括操作方法及有关的操作规则等,是对数据库的动态描述。主要包括数据检索和更新(插入、修改、删除)
  • 完整性约束:是关于数据状态和状态变化的一组完整性约束条件(规则)的集合。如在关系模型中,任何关系必须满足实体完整性参照完整性这两个条件;此外数据库还应提供定义完整性约束条件的机制(用户自定义完整性)

2.3.2 数据模型的分类

  • 现实世界 是存在于人们头脑之外的世界,就是人们赖以生存的生活环境
  • 信息世界 是现实世界在人们头脑中的反映
  • 机器世界 就是计算机内的数据形态

通常一个好的数据模型应该具备2.3.1提出的三个要素以外,还应该满足以下三方面的性能需求:1.能比较真实地模拟或抽象表示现实世界 2.容易为人所理解 3.便于在计算机上实现

根据不同的抽象层次,数据模型有以下三类:

  • 概念数据模型 是对现实世界中各种事物及其联系特征的数据抽象,即将现实世界转化为信息世界。与具体地DBMS无关且用户容易理解,是数据库设计员与用户之间进行交流的语言。
  • 结构数据模型 又称 逻辑数据模型 是用户从数据库中所看到的数据模型,是具体DBMS所支持的数据类型,如网状、层次、关系数据模型等。
  • 物理数据模型 是描述数据在存储介质上组织结构的数据模型,它不但与具体的DBMS有关,而且与操作系统和硬件有关,是物理层次的数据模型。

在设计实施过程中的流程与顺序如下:

  1. 数据库设计员根据用户的实际情况,将现实世界的数据特征抽象为概念数据模型。
  2. 当确认该模型真实地描述了企业实际之后,数据库设计员将概念数据模型转化为DBMS支持的某一种结构数据模型,并利用DBMS提供的数据定义语言将其书写为程序源码(称为模式)。
  3. DBMS将其转换为数据库目标模式,并在OS的支持下自动将其转换为物理数据模型,并按物理数据模型的格式将其存放在外存储介质上,形成数据库文件。

2.3.3 实体-联系(E-R)模型

  • E-R 实体模型中的基本概念
  1. 实体:客观存在并可区别的事物
  2. 属性:实体通常有若干特征,每个特征成为实体的一个属性
  3. 实体型:具有相同属性的一类实体必然具有共同的特征和性质
  4. 实体集:若干同型实体的集合
  5. 关键字:能唯一标识实体集中每个实体的属性集合称为关键字(码)
  6. 域:属性的取值范围称为域
  7. 联系:实体间的联系
    • 1:1联系
    • 1:n联系
    • m:n联系
  • E-R图要点(符号约定)
  1. 实体(集、型):用矩形表示,矩形框内写明实体名。
  2. 联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关的实体连接起来,同时在无向边的旁边标注上联系的模型。如果一个联系具有属性,则这些属性也要用无向边与该联系联系起来。
  3. 属性:用椭圆形表示,并用无向边将其与联系链接起来。

具体方法分为集成法和分离法两种。


2.3.4 常用的结构数据模型

  • 层次模型

    • 数据结构

      • 有且只有一个节点没有双亲(根节点)
      • 除根节点以外的其他节点有且只有一个双亲节点与之相连
    • 优点
      • 本身比较简单,很少几条命令就能操纵数据库,使用方便
      • 对于实体之间联系固定且预先定义好的应用系统,层次数据模型i性能优于关系模型,不低于网状模型
      • 提供了良好的完整性支持
      • 对具有一对多层次关系的部门描述非常自然直观易于理解
    • 缺点
      • 只能表示1:n联系(可以用复杂手段实现m:n联系)
      • 树形结构层次顺序严格复杂,数据查询和更新操作复杂,应用程序编写困难
  • 网状模型

    • 数据结构

      • 允许1个以上节点无双亲
      • 1个节点可以有两个或两个以上的双亲
    • 与层次模型的区别
      • 适应更为普遍的联系(m:n)
      • 双亲结点不唯一 -> 所有节点地位相同
      • 允许有复合联系
    • 优点
      • 能够更为直接地描述现实世界,如果一个节点可以有多个双亲
      • 具有良好性能,存取效率高
    • 缺点
      • 结构复杂
      • 其DDL、DML复杂,用户不易使用
      • 由于记录之间地联系通过存取路径实现,应用程序访问数据时必须选择适当的存取路径,因此用户必须了解系统结构的细节,加重了编写程序的负担
  • 关系模型

    • 数据结构

      • 属性:二维表的列
      • 关系模式:二维表的表头,基本表的结构
      • 关系:一张二维表
      • 元组:除表头外的任一非空行
      • 候选键:二维表中某些属性的集合,可以确定一个元组
      • 域:属性的取值范围
      • 分量:元组中的一个属性值
    • 操作 主要分为更新和查询两大类,其特点是集合操作
    • 存储结构
      • 数据库作为一个操作系统的文件存储
      • 关系以文件的形式存储在数据库文件中,其文件结构由DBMS自己设计和管理
    • 优点
      • 建立在严格的数学理论基础上
      • 概念单一
      • 存取路径对用户相对透明
      • 集合操作
    • 缺点
      • 由于存取路径相对透明,查询效率往往不如非关系数据模型,因此需对查询优化
  • 面向对象模型

文件系统 E-R模型 关系模型
记录型 实体型 关系模式
数据文件 实体集 关系(基本表)
记录 实体 元组
字段 属性 属性
关键字段 关键字 候选键
主关键字段 主关键字 主键

2.4数据库系统的模式结构

2.4.1 数据库系统模式的概念

  • 模式 是数据库中全体数据特征及其联系的结构化描述
  • 模式的一个具体值称为模式的一个实例

    模式相对稳定而实例时相对变动的,因为数据库中的数据是在不断更新的。模式反映的是数据的结构及其联系,而实例反映的是数据库的某一时刻的状态。


2.4.2 数据库的三级模式

三级模式是指DBMS将数据库中的数据抽象为外模式、(逻辑)模式和内模式

  • 模式 也称 结构模式逻辑模式 ,是对全体数据的整体逻辑结构的特征的描述,它与结构(逻辑)数据模型对应

  • 外模式 又称 子模式用户模式 ,是数据库用户(包括应用程序员和最终用户)能够看见的和使用的局部数据的逻辑结构与特征的描述,一般是模式的子集,它是由外模式DDL书写的源码。

  • 内模式 又称 存储模式 ,是数据库物理结构和存储方式的描述,是数据在数据库内部的表示方式

2.4.3 数据库的二级映像功能与数据独立性

DBMS在外模式、模式、内模式之间提供了两层映像:1.外模式/模式映像 2.模式/内模式映像

  • 模式/外模式映像 是在外模式中定义的,当模式发生改变时,经DBA对外模式/模式映像进行相应改变,就可以使外模式保持不变。由于应用程序是依据外模式编写的,因此模式改变时程序不必修改,保证了数据与程序之间的逻辑独立性

  • 模式/内模式映像 用于定义内模式与模式之间的对应关系,即数据库全局逻辑结构与存储之间的对应关系。数据库中只有一个模式,也只有一个内模式,所以模式/内模式映像是唯一的。这个模式是在内模式的描述中定义的。当数据库的存储结构发生变化时,经映像改变而保持模式不变,应用程序不必修改,保证了物理独立性

例:假设一个应用程序A,要求从数据库中取出一条记录,则程序利用数据操纵语言向DBMS提出请求。DBMS在收到命令后,系统内部发生如下事件:

  1. 应用程序A向DBMS发出读一个记录的操作命令(一条DML语句,相当于SELECT),且命令中包含操作对象和操作条件。当计算机执行该DML语句,立即启动DBMS,并把读记录的命令传给DBMS。
  2. DBMS调用应用程序A对应的外模式,检查存取权限,决定是否执行A的操作命令
  3. 当确定A的命令合法之后,DBMS调用模式,并根据模式与外模式的映射关系,确定读入哪些模式记录。
  4. DBMS根据模式与内模式的映射,调出内模式得到组织物理记录的结构和存取信息。
  5. DBMS向OS申请读入所需的物理记录。
  6. OS执行读命令,从存储介质中将指定记录读入系统缓冲区,并在操作后向DBMS做出应答。
  7. DBMS参照模式和外模式的映射,将读入系统缓冲区的数据转换为应用程序所需要的记录形式。
  8. DBMS把用户记录从系统缓冲区送到应用程序A的用户工作区。
  9. DBMS将读记录操作的成功与否的信息作为一种状态送给应用程序A。
  10. 此后,应用程序A根据返回的状态信息进行相关处理。

2.5 DBMS功能


2.6 数据库系统的组成


第3章 关系数据库模型

【数据库及其应用】(持续更新中)相关推荐

  1. HCIA-GaussDB 华为认证数据库工程师(持续更新中60%)

    // An highlighted block 第一.二章主要介绍数据库的发展史,基本概念等内容, 第三.四章节主要介绍GaussDB数据库的SQL语法, 第五章介绍数据库安全相关内容, 第六章介绍G ...

  2. 数据库SQL语言学习--数据查询(持续更新中)

    数据库SQL语言学习--数据查询(持续更新中) 上机练习1 1.              启动SQL Server 2008中的 SQL Server Management Studio. 2.   ...

  3. 数据库SQL语言学习--上机练习2(连接查询 嵌套查询)(持续更新中)

    数据库SQL语言学习--上机练习2(连接查询 嵌套查询)(持续更新中) 上机练习2 1.              启动SQL Server 2008中的 SQL Server Management ...

  4. 数据库SQL语言学习--上机练习4(视图)(持续更新中)

    数据库SQL语言学习--上机练习4(视图)(持续更新中) 上机练习4 一.实验目的 1. 熟悉和掌握对数据表中视图的查询操作和 SQL 命令的使用: 2. 熟悉和掌握对数据表中视图的更新操作和 SQL ...

  5. 前端知识点总结——JS高级(持续更新中)

    前端知识点总结--JS高级(持续更新中) 1.字符串 什么是: 连续存储多个字符的字符数组 相同: 1. 下标 2. .length 3. 遍历 4. 选取: slice(starti[, endi] ...

  6. 开源工业缺陷数据集汇总,持续更新中(已更新28个)

    欢迎大家关注我的公众号:一刻AI 本文目前汇总了常见的28个开源工业缺陷数据集,持续更新中 (欢迎大家留言补充,共同建设一个为大家提供便利的文章) 东北大学热轧带钢表面缺陷数据集 官方链接:Visio ...

  7. JAVA面试大全(持续更新中...)

    本文旨在收集Java面试过程中出现的问题,力求全面,仅作学习交流,欢迎补充,持续更新中-,部分段落选取自网上,部分引用文章已标注,部分已记不清了,如侵权,联系本人 Java基础 1.面向对象的概述 面 ...

  8. 2020年拼多多校招面试题及答案-最全最新-持续更新中(2)

    大家好我是好好学习天天编程的天天 一个整天在互联网上种菜和砍柴的程序员~ 2020年拼多多校招面试题及答案-最全最新-持续更新中(2) 2020年拼多多校招面试题一面 2020年拼多多校招面试题一面- ...

  9. 若依微服务框架ruoyi-cloud使用手册(持续更新中)

    若依微服务框架ruoyi-cloud使用手册(持续更新中) 一.项目启动事项 二.新建功能模块案例 三.不同微服务系统间接口调用案例 四.服务器部署 五.一些坑~ 一.项目启动事项 1.首先进行项目相 ...

  10. 【Vue全家桶+SSR+Koa2全栈开发】项目搭建过程 整合 学习目录(持续更新中)

    写在开头 大家好,这里是lionLoveVue,基础知识决定了编程思维,学如逆水行舟,不进则退.金三银四,为了面试也还在慢慢积累知识,Github上面可以直接查看所有前端知识点梳理,github传送门 ...

最新文章

  1. 1 张图,拆解阿里 P8高级架构师必会技术栈!
  2. javascript原型对象、原型链、构造函数
  3. 【机器学习】最近邻算法KNN原理、流程框图、代码实现及优缺点
  4. Java字节码方法表与属性表深度剖析
  5. 姚期智:算法将推动下一波AI浪潮,现有革新将达极限
  6. oracle dbv 离线,bbed和dbv检查数据文件结果不一致?
  7. 我的 Windows 电脑已经不用安全软件好多年了
  8. 获取文件夹中所有文件的文件名[重复]
  9. matlab2010b数值分析,matlab2010b教程
  10. C语言根号作用,c语言开根号(开根号编程)
  11. MATLAB 入门之旅【官方基础教程】
  12. 易了千明之易语言套装视频教程第四套辅助制作
  13. COMSOL35a下载地址
  14. 【火灾疏散建模】基于MATLAB的火灾人员疏散建模编程和仿真分析
  15. 基于Java EE的网上书店系统
  16. Android面试(下篇)
  17. linux 进程带宽限制,如何限制网络带宽在Linux上
  18. 让鼠标漫天飞舞:在内核中实现鼠标的中断处理
  19. 将汉子转化为拼音的js插件
  20. 兔子数列 - C语言

热门文章

  1. 现在面试都问什么「字节、蚂蚁、美团、滴滴面试小记」
  2. linux yy命令如何使用,Linux常用终端操作命令
  3. 技术人如何通过了解业务,获取晋升机会
  4. java asn.1编码_ASN.1编码方式详解
  5. 在线客服系统提高电商行业客户体验和成交率
  6. BSidesSF 2019 部分writeup
  7. 想要提升英语阅读能力的小伙伴建议收藏!
  8. 3的四次方在计算机上怎么求,“x的4次方+y的4次方”这个怎么因式分解?多年以后我依然记...
  9. 微信小程序服务器文件下载及解压
  10. 计算机专业历史与逻辑的统一,历史与逻辑的统一关系