数据库(Database,DB)
数据库是按照数据结构来组织
、存储
和管理
数据的仓库
这里需要理解三个概念:数据库、数据库管理系统、数据库应用程序
数据库:
提供存储空间来存储数据的一个容器
数据库管理系统(Database Management System,DBMS
):
专门用来创建和管理数据库的一套软件,介于应用程序和操作系统之间,比如MySQL
、Oracle
、SQL Server
、DB2
、postgresql
等
数据库应用程序:
数据库管理系统很多时候无法满足用户对数据库的管理需求,此时就需要使用数据库应用程序与数据库管理系统进行通信、访问和管理DBMS中存储的数据。常见的数据库应用程序有:SQLyog
、Navicat
、DbVisualizer
等
他们之间的关系如下图所示:
数据库技术经历了三个发展阶段:
三级模式:数据库管理系统从三个层次来管理数据,分别是外部层(External Level)、概念层(Conceptual Level)和内部层(Internal Level),这三个层次分别对应三种模式,分别是外模式(External Schema)、概念模式(Conceptual Schema)和内模式(Internal Schema)。
二级映像:外模式和概念模式之间,概念模式和内模式之间还存在映像,即二级映像。
他们之间关系如下所示:
外模式:面向应用程序,用于描述用户的数据视图(View)
内模式:又称为物理模式、存储模式,描述数据在磁盘中如何存储的
概念模式:又称为逻辑模式,描述数据的整体逻辑结构的。
为了更好理解,以Excel表格类比成数据库:
数据库发展的过程中出现了3种数据模型:层次模型、网状模型、关系模型
建立在关系模型之上的数据库叫做关系型数据库,本文所讲mysql就是一个关系型数据库。
要理解关系模型就要先理解一些概念:数据建模、概念模型的术语、E-R图、关系模型、关系模型的完整性。
数据建模
数据建模是对现实世界中的各类数据的抽象组织,以确定数据库的管辖范围、数据的组织形式等。
数据建模大致分为3个阶段:
数据建模的过程如下:
概念模型的术语
实体(Entity)
是指客观存在并可相互区分的事物。
例如,学生、班级、课程都是实体。
属性(Attribute)
是指实体所具有的某一特性,一个实体可由若干个属性来描述。
例如,学生实体的属性有学号、学生姓名和学生性别。
属性
由两部分组成,分别是属性名
和属性值
。
例如,学号和学生姓名是属性名,而“1、张三”这些具体值是属性值。
联系(Relationship)
是指实体与实体之间的联系,有一对一
、一对多
、多对多
三种情况。
例如,每个学生都有一个学生证,学生和学生证之间是一对一
的联系;一个班级有多个学生,班级和学生是一对多
的联系;一个学生可以选修多门课程,一门课程又可以被多个学生选修,学生和课程之间就形成了多对多
的联系。
实体型(Entity Type)
实体类型,通过实体名(如学生)及其属性名集合(如“学号、学生姓名、学生性别”)来抽象描述同类实体。
实体集(Entity Set)
是指同一类型的实体集合,如全校学生就是一个实体集。
E-R图
E-R图
也称为实体-联系图
(Entity Relationship Diagram)。
E-R图是一种用图形表示的实体联系模型,E-R图提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。
E-R图通用的表示方式如下。
实体
:用矩形框表示,将实体名写在框内。
属性
:用椭圆框表示,将属性名写在框内,用连线将实体与属性连接。
联系
:用菱形框表示,将联系名写在框内,用连线将相关的实体连接,并在连线旁标注联系类型(一对一“1:1”、一对多“1:n”、多对多“n:m”)。
关系模型
关系(Relation)
用于反映元素之间的联系和性质。从用户角度来看,关系模型的数据结构是二维表
,即通过二维表来组织数据。
一个关系对应一张二维表
,表中的数据包括实体本身的数据和实体间的联系。
属性(Attribute)
:二维表中的列称为属性,每个属性都有一个属性名。
元组(Tuple)
:二维表中的每一行数据称为一个元组。
域(Domain)
:域是指属性的取值范围,例如,性别属性的域为男、女。
关系模型的完整性
关系模型的完整性:为了保证数据库中数据的正确性
和相容性
,需要对关系模型进行完整性约束
。完整性通常包括实体完整性
、参照完整性
和用户自定义完整性
实体完整性
:要求关系中的主键不能重复,且不能取空值。空值是指不知道、不存在或无意义的值。
参照完整性
:要求关系中的外键要么取空值,要么取被参照关系中的某个元组的主键值。
用户自定义完整性
:是用户针对具体的应用环境定义的完整性约束条件,由DBMS检查用户自定义的完整性,比如用户名不允许重复
等。
关系模型可以使用关系代数(Relational Algebra)来进行关系运算。
关系代数是一种抽象的查询语言,是研究关系模型的数学工具。
关系代数运算符主要包括并
、差
、交
、笛卡尔积
、选择
、投影
、连接
和除
并(Union)、差(Difference)、交(Intersection)
并、差、交运算要求参与运算的两个关系具有相同数量的属性。运算结果是一个具有相同数量属性的新关系。
设有关系R和关系S
R∪S
表示合并两个关系中的元组,数学描述:R∪S={t | t∈R ∨ t∈S}
R-S
表示找出属于R但不属于S的元组,数学描述:R-S={t | t∈R ∧ t∉S }
R∩S
表示找出既属于R又属于S的元组,数学描述:R∩S={t | t∈R ∧ t∈S}
∨表示逻辑运算符或,∧表示逻辑运算符与
笛卡尔积(Cartesian Product)
设关系R有n个属性,关系S有m个属性
R和S的笛卡尔积:元组的前n个属性来自R,后m个属性来自S。
结果属性个数=n+m,结果元组的总个数=R和S中的元组的乘积。
数学描述:假设R(<