数据库系统原理¶
数据库基本概念¶
1.数据
数据(Data)是描述事物的符号记录,是指用物理符号记录下来的、可以鉴别的信息。
2.数据库
数据库(Database,DB)通俗地被称为存储数据的仓库,只是这个仓库是存储在计算机存储设备上的,并且其所存储的数据是按一定的格式进行存储的。
3.数据库管理系统
数据库管理系统(Database Management System,DBMS)是专门用于建立和管理数据库的一套软件,介于应用程序和操作系统之间。
-- 功能
1-数据定义功能
2-数据操作功能
3-数据库的运行管理功能
4-数据库的建立和维护功能
5-数据组织、存储和管理功能
6-其他功能
4-数据库系统
数据库系统(Database System,DBS)是指在计算机中引入数据库技术之后的系统。
数据管理技术的发展¶
1.人工管理阶段(20 世纪 50 年代中期以前)
-- 特点
数据不保存
应用程序管理数据
数据面向应用
2.文件系统阶段(20 世纪 50 年代后期到 60 年代中期)
3.数据库系统阶段
-- 特点
数据集成
数据共享性高
数据冗余小
数据一致性
数据独立性
实施统一管理与控制
减少应用程序开发与维护的工作量
数据库系统的结构¶
数据库系统的三级模式结构
数据库系统的运行与应用结构
客户/服务器结构(Client/Server,C/S)模式
浏览器/服务器结构(Browser/Server,B/S)模式
数据模型¶
数据特征与数据模型组成要素¶
数据结构
数据操作
数据约束
数据模型的分类¶
1.概念层数据模型¶
-
信息世界中的基本概念¶
1. 实体(Entity)
客观存在并可相互区别的事物称为实体。实体可以是实际的事物,也可以是抽象的概念或联系,例如,商品、学生、部门、课程、比赛等都可以作为实体
2. 属性(Attribute)
实体所具有的某种特性称为实体的属性。一个实体可以由多个属性来描述,例如,学生具有学号、姓名、性别、出生日期等特性,也就是说学生实体具有学号、姓名、性别、出生日期等属性
3. 码或键(Key)
可唯一标识实体的属性集称为码或键。例如,学号是学生实体的码或键
4. 域(Domain)
属性的取值范围称为该属性的域。例如,学生实体中姓名的域为字符串集合,性别的域为(男,女)
5. 实体型(Entity Type)
具有相同属性的实体必然具有共同的特征和性质。用实体名与属性名集合来抽象和刻画同类实体,称为实体型。例如,学生(学号、姓名、性别、出生日期)就是一个实体型
6. 联系(Relationship)
在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界中反映为实体(型)内部的联系和实体(型)之间的联系。实体内部的联系通常是指实体各属性之间的联系,例如,确定了学号,就一定能知道与之对应的姓名,即学号与姓名这两个属性之间有联系。实体之间的联系是指不同实体之间的联系,例如,一个班有许多的学生,一个学生只属于一个班级,学生与班级这两个实体之间有联系
概念模型的表示方法¶
1.实体型,其用矩形表示,矩形框内写明实体的名称
2.属性,其用椭圆表示,并用无向边将其与相应的实体连接起来
3.联系,其用菱形表示,菱形框内写明联系的名称,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1、1:N 或 M:N),如果一个联系具有属性,则这些属性也要用无向边与该联系连接起来。如下图中连接在“选课”联系上的“成绩”就是联系的属性
值得注意的是:实体-联系方法是抽象和描述现实世界的有力工具。用 E-R 图表示的概念模型独立于具体的 DBMS 所支持的逻辑模型,它是各种逻辑模型的共同基础,因而比逻辑模型更一般、更抽象、更接近现实世界
2.逻辑层数据模型¶
层次模型
网状模型
关系模型
面向对象模型
3.物理层数据模型¶
物理层数据模型,也称为数据的物理模型(Physical Model),其描述数据在存储介质上的组织结构,是逻辑模型的物理实现,即每一种逻辑模型在实现时都有与其对应的物理模型。物理模型是数据库最底层的抽象,它确定数据的物理存储结构、数据存取路径以及调整、优化数据库的性能。物理模型的设计目标是提高数据库性能和有效利用存储空间。物理数据模型不但由 DBMS 的设计决定,而且与操作系统、计算机硬件密切相关。物理数据结构一般都向用户屏蔽,用户不必了解其细节
关系数据库模型¶
-- 1. 表(Table)
表,也称为关系,是一个二维的数据结构,它由表名、构成表的各个列(如学号、姓名等)及若干行数据(各个学生的具体信息)组成。每个表有一个唯一的表名,表中每一行数据描述一条具体的记录值,如一个学生的基本信息
-- 2. 关系(Relation)
一个关系逻辑上对应一张二维表,可以为每个关系取一个名称进行标识。例如,上表所示的学生基本信息登记表,也即学生基本信息登记表关系
关系可以有三种类型,即基本关系、查询表和视图表。其中,基本关系通常又称为基本表或基表,是实际存在的表,它是实际存储数据的逻辑表示;查询表是查询结果对应的表;视图表是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据
-- 3. 列(Column)
表中的列,也称作字段(Field)或属性(Attribute)。表中每一列有一个名称,称为列名、字段名或属性名。每一列表示实体的一个属性,具有相同的数据类型。如下表所示,它列出了上述学生基本信息登记表中各个字段的字段名及其数据类型的定义
中文字段名 数据类型 宽度
学号 字符型 10
姓名 字符型 20
性别 字符型 3
出生日期 日期型
籍贯 字符型 20
民族 字符型 30
班号 字符型 8
身份证号 字符型 18
需要说明的是:在一个数据库中,表名必须唯一;在表中,字段名必须唯一,不同表中可以出现相同的字段名;表和字段的命名应尽量有意义,并尽量简单
-- 4. 属性(Attribute)
表中的一列即为一个属性,给每一个属性起一个名称即属性名。与之同义的术语是“列”。表中属性的个数称为关系的元或度。列的值称为属性值;属性值的取值范围称为值域。例如,上述学生基本信息登记表关系的属性有:学号、姓名、性别、出生日期、籍贯、民族、班号、身份证号,所以元数为 8,即学生基本信息登记表关系是一个 8 元关系或 8 度关系
-- 5. 行(Row)
表中的行(Row),也称作元祖(Tuple)或记录(Record)。表中的数据是按行存储的。表中的一行数据即为一个元祖或一条记录,其每行由若干字段值组成,每个字段值描述该对象的一个属性或特征。例如,上表中,第一行数据表示的是学号为 2013110101、姓名为张笑笑的学生基本信息
-- 6. 元祖(Tuple)
表中的一行即为一个元祖。例如,上表的元祖有:
(2013110101,张笑笑,男,1997-12-11,山西,汉,AC1301,XXX1)
(2013110103,王一敏,女,1996-12-10,河北,汉,AC1301,XXX2)
(2013110201,靖姗,女,1996-09-08,新疆,锡伯,AC1302,XXX3)
-- 7. 分量(Component)
元祖中的一个属性值,称为分量。例如,在学生基本信息登记表中元祖(2013110103,王一敏,女,1996-12-10,河北,汉,AC1301,XXX2)的每一个属性值都是它的分量
-- 8. 码或键(Key)
如果在一个关系中,存在这样的属性(或属性组),使得在该关系的任何一个关系状态中的两个元祖,在该属性(或属性组)上值的组合都不相同,即这些属性(或属性组)的值都能用来唯一标识该关系的元祖,则称这些属性(或属性组)为该关系的码或键
-- 9. 超码或超键(Super Key)
如果在关系的一个码中移去某个属性,它仍然是这个关系的码,则称这样的码或键为该关系的超码或超键。一般地,每个关系至少有一个默认的超码或超键,即该关系的所有属性的集合,也是这个关系的最大超码或超键。例如,上表中,(学号,姓名)、(学号,姓名,性别,出生日期)、(学号,姓名,性别,出生日期,籍贯,民族,班号,身份证号)都是该表的超码或超键
-- 10. 候选码或候选键(Candidate Key)
如果在关系的一个码或键中,不能从中移去任何一个属性,否则它就不是这个关系的码或键,则称这样的码或键为该关系的候选码或候选键。可见,一个关系的候选码或候选键是这个关系的最小超码或超键。例如,上表中学号和身份证号都是候选键,因为若给定学号或身份证号,都可以确定一个学生的全部信息
有些情况下,需要几个属性(即属性组或属性集合)才能唯一确定一条记录。例如,对于下表所示的学生成绩表的结构定义,仅仅确定学号或课程号,都不能唯一确定某个学生具体一门课程的成绩。所以,学生成绩表的主键是由学号和课程号两个属性组成的属性集合,即(学号,课程号)
中文字段名 数据类型 宽度
学号 字符型 10
课程号 字符型 6
成绩 数值型
开学日期 日期型
-- 11. 主码或主键(Primary Key)
在一个关系的若干个候选码或候选键中指定一个用来唯一标识关系的元祖,则称这个被指定的候选码或候选键为该关系的主码或主键。例如,学生基本信息登记表的所有候选键中,指定学号作为该表的主键
-- 12. 全码或全键(All-Key)
一个关系模式的所有属性集合是这个关系的主码或主键,则称这样的主码或主键为全码或全键
-- 13. 主属性(Primary Attribute)和非主属性(Nonprimary Attribute)
关系中包含在一个候选码中的属性称为主属性或码属性,不包含在任何一个候选码中属性称为非主属性或非码属性。例如,在学生基本信息登记表中,学号和身份证号是主属性,其他属性是非主属性
-- 14. 外码或外键(Foreign Key)
当关系中的某个属性(或属性组)不是这个关系的主码或候选码,而是另一关系的主码时,则称该属性(或属性组)为这个关系的外码或外键。例如,下表(班级表的结构定义表)中的班号是班级表的主键,而该属性又是学生基本信息登记表的一个属性,则属性班号称为学生基本信息登记表的外键
中文字段名 数据类型 宽度
班号 字符型 8
班级名称 字符型 20
所属院系 字符型 30
入学时间 日期型
班级最大人数 数值型
-- 15. 参照关系(Referencing Relation)和被参照关系(Referenced Relation)
参照关系也称为从关系,被参照关系也称为主关系,它们是指以外码相关联的两个关系。以外码作为主码的关系称为被参照关系;外码所在的关系称为参照关系。被参照关系与参照关系是通过外码相联系的,这种联系通常是一对多的联系。例如,上面的班级表是被参照关系,而学生基本信息登记表是参照关系,它们通过外码“班号”相联系
-- 16. 域(Domain)
域表示属性的取值范围。例如,学生基本信息登记表中“性别”字段的取值范围是“男”或“女”,“出生日期”字段的值应该是合法的日期
-- 17. 数据类型(Data Type)
表中每个列都有相应的数据类型,它用于限制(或容许)该列中存储的数据。每个字段表示同一类信息,具有相同的数据类型。例如,学生基本信息登记表中字段“姓名”的数据类型是字符类型,其对应表示学生的姓名信息
-- 18. 关系模式(Relation Schema)
同数据类型一样,数据库也有“型”(type)和“值”(value)之分。在关系数据库中,关系模式是型,关系是值,即关系模式是对关系的描述,例如学生基本信息登记表关系的结构定义,关系则是元祖的集合,是关系模式在某一时刻的状态或内容
关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的。这是因为关系操作在不断地更新着数据库中的数据。例如,班级表对应的关系模式在不同的学年通常是不变的,而班级表(关系)由于新学年学生的入学,其内容会发生变化
在实际工作中,人们常常会把关系模式和关系都笼统地称为关系,当然这不难从上下文中加以区别
-- 19. 关系数据库(Relation Database)
关系数据库是以关系模型作为数据的逻辑结构,并采用关系作为数据组织方式的一类数据库,其数据库操作建立在关系代数的基础上。在一个给定的应用领域中,所有关系的集合构成一个关系数据库
需要注意的是:上述例子中,关系模式的名称和字段的名称均使用的是中文,但在实际的数据库应用系统中,一般不采用中文作为表名、字段名等。这是因为在编写数据库应用程序时,表明字段名会作为变量名,而使用中文标识不方便,而且更重要的是有些数据库管理系统不能很好地支持中文的表名和字段名。因此,对于学生基本信息登记表的表名,可以命名为英文表达方式 tb_student;对于学生成绩表,可以命名为 tb_score;对于班级表,可以命名为 tb_class。相应的,字段名也需要替换为英文表达方式
此外,尽管关系模型的数据结构表示为二维表,但不是任意的一个二维表都可以作为一个关系。关系数据库对关系是有限定的,具体要求如下:
- 每一个属性都是不可分解的。这是关系数据库对关系的最基本的一个限定,要求关系的每一个分量必须是一个不可分的数据项,也就说,不允许表中有表
- 每一个关系仅仅有一种关系模式,即每一个关系模式中的属性的数据类型以及属性的个数是相对固定的
- 每一个关系模式中的属性必须命名,在同一个关系模式中,属性名必须是不同的
- 同一个关系中不允许出现候选码或候选键值完全相同的元祖
- 在关系中元祖的顺序(即行序)是无关紧要的,可以任意交换
- 在关系中属性的顺序(即列序)是无关紧要的,可以任意交换