3.3 数据库基础
3.3.1数据库系统的基本概念
1.数据
数据是数据库的基本对象,是描述事物符号记录,数据的类型有很多,文本、图形、图像、音频、视频等都是数据,他们经过数字化处理存入计算机。
2.数据库
数据库就是存放数据的仓库。
严格地讲,数据库是长期储存在计算机内、有组织、可共享的大量数据集合。数据库中的数据按一定数据模型组织、描述和储存、具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
3.数据库管理系统
数据库管理系统(DBMS)是科学组织和储存数据,对数据库进行统一的管理和控制,以保证数据库的安全性和完整性的软件集合。
数据库管理系统和操作系统一样是计算机的基础软件,也是一个大型复杂的软件系统。它主要的功能包括:
(1)数据定义功能
(2)数据存取功能
(3)数据库运行管理功能
(4)数据库的建立和维护功能
(5)数据库的传输
4.数据库管理员
由于数据库的共享性,因此对数据库的规划、设计、维护、监视等需要有专人管理,称之为数据库管理员(Database Administrator,DBA)。其职责如下:
(1)数据库设计(Database Design)
(2)数据库维护
(3)改善系统性能,提高系统效率
5.数据库系统
数据库系统是由数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员组成的储存、管理、处理、维护数据的系统。
3.3.2 关系数据库
关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系数据库则可以看作是由若干二维表格组成的数据集合。
1.关系模型
关系模型是用二维表格来表示实体及实体之间联系的数据模型。关系模型是将同一类实体的数据组织成二维表的形式,每个二维表称为一个关系。
关系模型的基本术语如下:
(1)关系
一个关系对应一张二维表。
(2)属性
表中的每一列称为一个属性。每个属性都有一个名称,被称为属性名,也称为字段名。
(3)记录
表中的一行数据称为一条记录(也被称为元组)。每一条记录是由相应的属性值组成。
(4)候选码关系中某一属性或属性组,它的值能够唯一标识一条记录,则把这一属性或属性组称为候选码(候选键)。一个关系可以有多个候选码,选择其中一个候选码为当前关系的主码。例如,在关系student中,不同记录属性sno的值不能相同,即sno值具有唯一性,因此sno是候选码。但是,在关系sc中,无论sno还是cno的值都不具有唯一性,都不能做候选码,只有属性组sno和cno能够作为候选码,它们的值组合在一起可以唯一标识一条记录,也就是说能够唯一确定一名学生的某一门课程的成绩。
(5)值域
属性的取值范围称为值域。
(6)关系模式
关系模式是对关系的描述,它主要包括关系名,组成该关系的各属性名、值域和关键字。关系模式的一般形式为:
关系名(属性名1,属性名2,……,属性名n)
2.关系模型的三级模式结构
所谓关系模型的三级模式结构是对数据库中用户看得见的局部数据的逻辑结构、数据库内部数据逻辑结构以及数据库内部数据存储结构的描述,主要分为内模式、模式和外模式,模式是关系模式的集合,外模式是关系子模式的集合,内模式是存储模式的集合。
(1)模式
模式也称为逻辑模式,它是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。模式既不涉及数据的物理存储细节和硬件环境,也与具体的应用程序、应用开发工具以及高级程序设计语言无关。
(2)外模式
外模式也称为子模式(subschema)或用户模式,它是数据库用户(应用程序员、最终用户)能够看到的使用的局部数据的逻辑结构和特征的描述,是数据库的数据视图,是与某一个应用有关的数据的逻辑表示。
外模式通常是模式的子集。一个数据库可以有多个外模式。同一个外模式可以为某一用户的多个应用系统所使用,但一个应用系统只能使用一个外模式。
(3)内模式
内模式也称为存储模式(Storage schema),一个数据库只有一个内模式。
内模式是数据库物理结构和存储方式的描述,是数据在数据库内部的表示方式。
3.关系模型的二级映像
DBMS在这三级模式之间设计了两层映像:
l外模式/模式映像
l模式/内模式映像
这两层映像保证了数据库中的数据能够具有较高的逻辑独立性和物理独立性。
(1)外模式/模式映像
一个数据库只有一个模式,但可以有多个外模式。所以,对于每一个外模式,数据库系统都有一个外模式/模式映像,它定义了这个外模式与模式的对应关系。外模式的描述中通常包含了这些映像的定义。
当模式改变时(增加新的关系、新的属性、改变属性的数据类型等),由数据库管理员对各个外模式/模式映像做相应的改变,可以使得外模式保持不变。而又由于应用程序应该是依据外模式编写的,从而应用程序不必修改,这就保证了数据与程序的逻辑独立性。
(2)模式/内模式映像
一个数据库只有一个模式,也只有一个内模式,所有模式/内模式映像是唯一的,它定义了数据全局逻辑结构与存储结构之间的对应关系。
当数据库的存储结构改变时(例如选用了另一个存储结构),由数据库管理员对模式/内模式映像做出相应的改变,可以使得模式保持不变,从而应用程序也不必改变。这就保证了数据和程序的物理独立性。
4.关系模型的完整性约束规则
关系模型的完整性规则是对数据的约束,主要包括实体完整性、参照完整性和用户自定义完整性规则等3种。实体完整性和参照完整性是关系模型必须满足的规则,由系统自动支持,所以称为数据库的不变性。
(1)实体完整性
实体完整性是对关系中记录候选码的约束。准确地说,实体完整性是指关系中候选码的值不能为空且不能有相同的值(唯一性)。
当候选码的值为空时,关系中的记录便无法确定;当候选码的值相同时,关系中就会有重复记录出现。因此,这就违背了关系模型的规则,这些现象是不允许的。
(2)参照完整性
参照完整性是对关系数据库建立联系的多个关系之间数据参照引用的约束,也就是对外码的约束。准确地说,参照完整性是指关系(从表)中外码的值必须是另一个关系(主表)候选码的值或为空(NULL)。
不同的DBMS对外码为空要求不同,一般情况下,关系中外码只允许出现一次为空,因为空值不能比较,如果出现多条外码为空的记录,不能保证外码的唯一性要求。
(3)用户自定义的完整性
用户定义的完整性是根据应用环境的不同,针对某一具体数据的约束条件。例如设置学生成绩的取值在0~100之间。
5.关系操作
在关系模型中,主要的运算有:选择、投影和连接。
(1)选择运算
选择(Selection)操作是指在一个关系中选择出满足给定条件的记录(也称为行或元组)组成新关系,新关系包含原关系中所有字段。
(2)投影操作
投影(Projection)操作是指在一个关系的所有属性中选取指定属性列组成新关系。
(3)连接操作
连接(Join)操作一般是将不同的两个关系通过连接条件组成一个新关系。如果在连接的新关系中包含原有两个关系的所有属性,称之为等值连接;如果结果中去掉重复列,称之为自然连接,自然连接是去掉重复列的等值连接。另外,等值连接中不要求相等属性值的属性名相同,而自然连接要求相等属性值的属性名必须相同,即两个关系只有在同名属性才能进行自然连接。
3.3.3结构化查询语言SQL
结构化查询语言(Structured Query Language)是一门ANSI的标准计算机语言,用来访问和操作数据库系统。SQL语句用于取回和更新数据库中的数据。SQL可与数据库程序协同工作,比如MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase以及其他数据库系统。
绍基本的、最重要的SQL命令:CREATE、INSERT、SELECT、UPDATE、DELETE、和DROP。
(1)CREATE
①CREATE DATABASE
功能:建立数据库,数据库是一个包括了多个基本表的数据集。
语法格式:
CREATEDATABASE<数据库名>〔其他参数〕
其中,<数据库名>在系统中必须是唯一的,不能重复,不然将导致数据存取失误。〔其他参数〕因具体数据库实现系统不同而异。
②CREATE TABLE
功能:创建数据表
语法格式:
CREATETABLE表名称
(
列名称1数据类型,
列名称2数据类型,
列名称3数据类型,
....
)
(2)INSERT
功能:用于向表格中插入新的行
语法格式:INSERT[INTO]表名称VALUES(值1,值2,....)
指定所要插入数据的列:INSERTINTO表名称(列1,列2,...)VALUES(值1,值2,....)
(3)SELECT
功能:用于从表中选取数据,结果被存储在一个结果表中(称为结果集)。
语法格式:
SELECT[ALL|DISTINCT|DISTINCTROW|TOP]
{*|table.*|[table.]field1[ASalias1][,[table.]field2[ASalias2][,…]]}
FROM table expression[,…][Next external database]
[WHERE…]
[GROUP BY…]
[HAVING…]
[ORDER BY…]
注意Where,Group By,Having,Order By顺序。
执行步骤:
①先从from字句一个表或多个表创建工作表
②将where条件应用于①的工作表,保留满足条件的行
③Group By将②的结果分成多个组
④Having将条件应用于③组合的条件过滤,只保留符合要求的组
⑤Order By对结果进行排序。
FROM子句
FROM子句是SELECT语句中必不可少的子句,可以使用FROM子句指定查询所需要的数据源名称。语法如下:FROM table_source
其中,table_source指定要在SQL语句中使用的表,视图。
WHERE子句
在数据库中查询数据时,有时只希望查询所需要的数据,而非数据表中的所有数据,那么就可以使用SELECT语句中的WHERE子句来实现。
WHERE子句通过条件表达式描述关系中元组的选择条件。数据库系统处理该语句时,按行为单位,逐个检查每个行是否满足条件,将不满足条件的行筛选掉。
WHERE子句的基本格式:WHERE search_conditions其中,search_conditions为用户所选所需要查询数据行的条件,即查询返回行记录的满足条件。对于用户所需要的所有行,search_conditions条件为true;而对于其他行,search_conditions条件为false或未知。
ORDER BY子句
有些时候,在使用SELECT语句进行数据查询后,想先看到众多数据中最新的信息或某列的最大值,就可以使用ORDERBY子句对生成的结果集进行排序。ORDERBY子句在SELECT语句中的语法格式:ORDER BY order_experssion[ASC|DESC]
其中,order_experssion表示用于排序的列或列名及表达式。当有多个排序列时,排序列之间用逗号隔开,而且列后都可以指定一个排序要求。
ASC—–升序排序(默认值)
DESC—降序排序
GROUPBY子句
使用GROUP BY子句可以将查询结果按照某一列数据值进行分类,换句话说,就是对查询结果的信息进行归纳,以汇总相关数据。语法格式如下:
GROUP BYgroup_by_expression[WITHROLLUP|CUBE]
其中,group_by_expression表示分组所依据的列,ROLLUP表示只返回第一个分组条件指定的列的统计行,若改变列的顺序就会使返回的结果行数据发生变化。CUBE是ROLLUP的扩展,表示除了返回由GROUPBY子句指定的列外,还返回按组统计的行。GROUPBY子句通常与统计函数联合使用。SQL中的聚集函数如表所示,但在使用GROUPBY子句时,将GROUPBY子句中的列称为分割列或分组列,而且必须保证SELECT语句中列是可计算的值并且GROUPBY列表中。
HAVING子句
HAVING子句的用法类似WHERE子句,它指定了组或集合的搜索条件。HAVING子句通常与GROUPBY子句一起使用。HAVING子句的语法格式如下:
HAVING search_conditions
其中search_conditions为查询所需的条件,即返回查询结果的满足条件。在使用GROUP BY子句时,HAVING子句将限定整个GROUP BY子句创建的组。
3.3.4 E-R关系模型
1.数据库中需要记录哪些信息
数据库设计首先标识要存储在数据库表中的数据类型。一个数据库包括有关一个企业或组织及其相互关系的信息。在关系数据库中,把实体表示为表。
2.E-R图的基本要素
通常,使用实体-联系图(Entity-Relationshipdiagram)来建立数据模型。可以把实体-联系图简称为E-R图,相应地可把用ER图描绘的数据模型称为E-R模型。E-R图中包含了实体(即数据对象)、关系和属性等3种基本成分,通常用矩形框代表实体,用连接相关实体的菱形框表示关系,用椭圆形或圆角矩形表示实体(或关系)的属性,并用直线把实体(或关系)与其属性连接起来。
实体型(Entity):具有相同属性的实体具有相同的特征和性质,用实体名及其属性名集合来抽象和刻画同类实体;在E-R图中用矩形表示,矩形框内写明实体名;比如学生张三丰、学生李寻欢都是实体。
属性(Attribute):实体所具有的某一特性,一个实体可由若干个属性来刻画。在E-R图中用椭圆形表示,并用无向边将其与相应的实体连接起来;比如学生的姓名、学号、性别、都是属性。
联系(Relationship): 数据对象彼此之间相互连接的方式称为联系,也称为关系,在E-R图中用实线表示。联系可分为以下 3 种类型:
(1) 一对一联系(1:1)
(2) 一对多联系(1: N)
(3) 多对多联系(M:N)
另外,实体间联系也需要转换成对应关系模式,而联系转换成为关系模式时,要根据联系方式的不同采用不同的转换方式:
(1)1:1联系的转换方法
①将1:1联系转换为一个独立的关系:与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,且每个实体的码均是该关系的候选码。
②将1:1联系与某一端实体集所对应的关系合并,则需要在被合并关系中增加属性,其新增的属性为联系本身的属性和与联系相关的另一个实体集的码。
(2)1:n联系的转换方法
①一种方法是将联系转换为一个独立的关系,其关系的属性由与该联系相连的各实体集的码以及联系本身的属性组成,而该关系的码为n端实体集的码;
②另一种方法是在n端实体集中增加新属性,新属性由联系对应的1端实体集的码和联系自身的属性构成,新增属性后原关系的码不变。
(3) m:n联系的转换方法
在向关系模型转换时,一个m:n联系转换为一个关系。转换方法为:与该联系相连的各实体集的码以及联系本身的属性均转换为关系的属性,新关系的码为两个相连实体码的组合(该码为多属性构成的组合码)。