数据库定义
数据库是一个以某种有组织方式存储的数据集合。
我们可以把他看成一个文件柜,存放数据的物理位置,不管数据以何种方式组织。
以下面的关系型数据库为例子
数据库:相互有关联关系的数据(若干表)的集合
用途
用于结构化存储数据!
对数据操作(增删改查)进行管理和操作,维护数据一致性
提供用户共享访问接口
什么是数据库系统?
数据库(DB)
数据库管理系统(DBMS) DataBase Management System
数据库应用(DBAP) DataBase Application
数据库管理员(DBA) DataBase Administrator
MySQL 就是一种 数据库管理系统DBMS
数据模型Model vs 模式
数据模型是模式的结构~
Data Model
- 规定模式统一描述方式的模型。 包括:数据结构,操作和约束
- 数据模型是 对模式本身结构的抽象~
比如:
关系模型: 所有模式都可以抽象为表的形式[数据结构],而每一个具体模式都是拥有不同列名的具体的表。
也就是说模式就是对应一种具体的表,因为一个数据库可能有多张表,但是这些表都是属于关系模型这种数据模型!
关系模型:表的 形式
层次模型:树的形式
网状模型:图的形式
再举个例子:
理清数据 模式 模型的关系
实例和模式
模式:数据库的总体设计称为数据库模式(数据的结构,对数据库中数据进行的一种结构性描述。) 数据的Schema
实例:特定时刻存储在数据库中的信息的集合称为数据库的一个实例
关系型数据库
就是使用了关系模型来组织数据的数据库
关系模型
指的是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
- 关系:理解为一张二维表,每个关系都具有一个关系名,也就是表名
- 元组tuple: 理解为二维表中的一行,在数据库中被称为记录
- 属性:可以理解为二维表中的一列,在数据库中被称为字段
- 域:属性的取值范围,数据库中某一列的取值限制。
一般是一组值的集合,这组值具有相同的数据类型。 - 关键字 :一组可以唯一标识元组的属性,数据库中称为主键,由一个或多个列组成
- 关系模式: 对关系的描述。 其格式为:关系名(属性1,属性2,….,属性N) ,在数据库中称为表结构。
note:
元组tuple/行/记录record
字段field/列/属性attribute
优点
容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解
使用方便:通用的SQL语言使得操作关系型数据库非常方便
易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率
表的严格定义
域: 一组值的集合,如整数的集合,字符串的集合等
集合中的元素的个数是基数 Cardinality
笛卡尔积
一组域,所有可能的n-元组的集合
元组的每一个值叫做一个分量
元组是从每一个域任取一个值所形成的一种组合:
(d1,d2,d3,….) 这样的组合
笛卡尔积是所有这样可能组合的集合。
举例:一个表的每一个域记为i,对应的基数是mi
所以元组个数为:m1xm2xm3…..
关系
由于笛卡尔积中的所有的元组并不都有意义。
关系就是 一组域(D1,D2,…,Dn)的笛卡尔积的子集。
笛卡尔积中具有某一方面以的那些元组被称为一个关系Relation
由于关系的不同列可能来自同一个域,为了区分所以需要为每个列起个名字,属性名。
关系模式(Schema)
关系可以用R(A1:D1,A2:D2,…An:Dn) 表示,这种描述就是关系模式Schema 或表标题
R是关系的名字,Ai是属性,Di是属性对应的域,n是关系的度或degree, 关系中元组的数目称为 关系的基数
例如:
Student(S# char(8),Sname char(10),Ssex char(2),Sage integer,D#char(2))
关系与关系模式
- 同一个关系模式下,可能有很多关系
- 关系模式是关系的结构,关系是关系模式在某一时刻的数据
- 关系模式是稳定的;而关系是某一时刻的值,是随时间可能变化的
Student(S# char(8),Sname char(10),Ssex char(2),Sage integer,D#char(2))
这样的是一个关系模式
关系的特性
列是同质: 每一列中的分量来自同一个域,同一个类型数据
但是不同列可以来自同一个域,(域是同一种数据的集合,跟表没什么关系),每一个列是一个属性,不同属性给予不同属性名
区分 域和属性
关系模式中的属性必须是不同的,A1,A2,…An必须是不同的,而Di可以相同,因为是属性下面的值,这些值可能是来自同一个域。
例如我们可以定义一个域为Person=所有男人、女人和儿童的集合={李基,张鹏,刘玉,王芳,张峰} 则下述关系:
三个列都是来自同一个域Person
列位置互换性
区分哪一列是 靠列名。
行位置互换性
区分哪一行是靠某一或某几列的值(关键字/键/码)
怎么区分关系
关系是以内容(名字或值)区分的,而不是属性在关系的位置区分。
还是刚才的例子,一个家庭的夫妻 ,子女之间的关系是确定好的了,也就是说特定的列上的键对应的其他列的键(值)是确定的!
元组的不重复性
要求一个表中的任意元组不同完全相同,但是实际中的表可能不完全遵守这个特性