高性能mysql(1)-数据库概论

数据库概论

数据库语言

数据库操纵语言:DML
数据库定义语言:DDL
数据库控制语言:DCL

数据库标准模式

三级模式

外模式:某一用户能够看见的和处理的数据结构描述
概念模式:从全局角度理解/管理的数据结构的描述,含相应的关联约束体现在数据之间的内在本质联系
内模式:存储在介质上的数据的结构描述,存储路径,存储方式,索引方式

两层映像

  • E-C映像:将外模式映射为概念模式,从而实现数据概念视图向外部视图的转换,便于用户使用和观察
  • C-I映像:将概念视图映射为内模式,从而实现数据概念视图向内部视图的转化,便于计算机存储

两个独立性

  • 逻辑的独立性:当概念模式变化的时候,可以不改变外部模式只需要改变E-C,无需改变程序
    -物理的独立性:可以不改变概念模式只需要改变C-I,从而不改变外模式

数据模型

数据模型:规定模式统一描述方式的模型,包括数据结构,操作,约束数据模型是对模式本身结构的抽象,模式是对数据本身结构的抽象。现在的数据库基本都是关系模型。

关系模型

  1. 描述数据库各种数据的基本结构形式。(Table/Relation)
  2. 描述表与表之间可能发生的各种操作。(关系运算)
  3. 描述这些操作所应遵循的各种约束条件。(完整性约束)

关系

  1. 域(列):一组值的集合。这组值具有相同的数据类型。
  2. 元组(行):从每一个域中任取一个值所形成的一种组合。
  3. 笛卡尔积:所有可能元组的集合。
  4. 关系:笛卡尔积中具有意义的某些元组的集合。
  5. 属性名:每一列的名字
  6. 表:由关系集合和属性名构成
    关系模式是关系的结构,关系模式是稳定的,关系是关系模式某一时刻的数据,是随时间而变化的。(可以大致的理解为表示关系模式而每一组数据是关系)

关系模型的完整性(*)

  • 超键 : 关系中的一个属性组,其值能唯一标识这个元组,但是可能含有多余属性,去掉这个属性不影响其功能。
  • 候选键:关系中的一个属性组,其值能唯一标识这个元组,从其中去掉任何一个属性就不具备唯一标识这个元组的功能。即不含多余属性的超键,则称这个属性组为候选键
  • 主键:当有多个候选键的时候选取一个候选键作为主键,一般选取只有一个属性的候选键作为主键,主键不能为null。
  • 外键 :关系R中的一个属性组,他不是关系R的候选键,但是却和另一个关系Y的候选键相对应,称为外键,外键可以为null。
  • 主属性:包含在任何一个候选键中的属性被称为主属性。其他属性被称为非主属性。

三个完整性(*)

  • 实体完整性:关系中的主键不能为空值空值,不知道或者无意义的值。
  • 参照完整性:如果关系R的外键Fk和关系Y的主键Pk对应,则R中的每一个元组的Fk值或者等于Y中某个元组的Pk值,或者为空值。

例如,如果在学生表和选修课之间用学号建立关联,学生表是主表,选修课是从表,那么,在向从表中输入一条新记录时,系统要检查新记录的学号是否在主表中已存在,如果存在,则允许执行输入操作,否则拒绝输入,这就是参照完整性。
参照完整性还体现在对主表中的删除和更新操作,例如,如果删除主表中的一条记录,则从表中凡是外键的值与主表的主键值相同的记录也会被同时删除,将此称为级联删除;如果修改主表中主关键字的值,则从表中相应记录的外键值也随之被修改,将此称为级联更新。
要注意的是再建立表的时候设置联级更新的时候在外键约束上必须开启此操作[On delete cascade],否则将违反约束条件。

  • 用户自定义完整性

范式和反范式(*)

函数依赖

简单来说函数依赖就是某个属性集决定另一个属性集时,称另一属性集依赖于该属性集。
例如:

一个关系:
U={学号,姓名,年龄,班级,班长,课号,成绩}
班号 -> 班长
学号,课号 -> 成绩

完全函数依赖

例如:U={学号,姓名,年龄,班级,班长,课号,成绩}
{学号,课号} -> U             完全依赖
{学号,课号} -> 姓名         部分依赖

学号就可以确定姓名

传递依赖

例如:U={学号,姓名,年龄,班级,班长,课号,成绩}
学号->班号 ,班号->班长
学号-> 班长

第一范式

第一范式(1NF)是指数据库表的每一列都是不可分割的原子数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

第二范式

若关系R(U)满足第一范式,且U中的每一个非主属性完全函数依赖于候选键,则称R(U)属于第二范式。
使用单值候选键可以有效的避免部分函数依赖

第三范式

关系R的每一个非主属性既不部分函数依赖于候选码也不传递函数依赖于候选码。
满足范式的数据库设计可以有效的减少数据的非受控冗余,但是随之带来的问题就是表之间的管理变多了,在查寻数据的时候难免要关联多张表,加大了数据库的开销,所以在实际的应用中都是范式和反范式混合使用的。

子查询(**查询优化很多都是基于此展开的)

in

表达式 [Not] in 子查询
语义:判断表达式的结果是否在子查询的结果之中

some

表达式 [<,>,<=,>=,<> ] some 子查询
语义:表达式值至少有一个结果和子查询结果的某一个值满足运算关系,则为真

all

表达式 [<,>,<=,>=,<> ] all 子查询
语义:表达式值结果和子查询所有值满足运算关系,则为真

exists

[not] exists 子查询
语义:子查询中有无结果存在

总结:
查询 最低 ,最高 等,一般使用 <=all ,>=all
查询 不是最低,不是最高使用 >some 查询 所有,没有 一般用 not exists

关系代数操作

并运算:子查询 Union [All] 子查询
交运算:子查询 Intersect[All] 子查询
差运算:子查询 Except[All] 子查询
通常情况下自动删除重复元组:不带All ,若要保留重复元组,则带ALL
在mysql中不支持差运算和交运算

连接操作

Inner join          内连接 
Left outer join      左外连接
Right outer join     右外连接
Full outer join      全外连接
Natural  join       自然连接

关于连接操作的区别:
连接操作的区别

视图

在三级模式两级映射结构中对应概念模式的数据在SQL中被称为基本表 ,而对应外模式的的数据称为视图。视图不仅包含外模式还包含了其E-C映像。视图在SQL中只存储由其基本表导出视图所需的公式,即由基本表产生的视图映像信息,其数据并不存储,而是在运行过程中动态产生和维护的。对视图数据的更改最终要反应在对基本表的更改上。

你可能感兴趣的:(高性能mysql(1)-数据库概论)