数据库常用概念 - STEMHA's Blog

数据库常用概念

基本概念

实体(entity):客观存在并可相互区别的事物称为实体。
实体型(entity type):用实体名及其属性名集合来抽象和刻画同类实体,称为实体型。
实体集(entity set):同一实体型的集合称为实体集。

术语对比

关系模型的数据结构术语 一般表格的术语
关系名 表名
关系模式 表头(表格的描述)
关系 (一张)二维表
元组 记录或者行
属性
属性名 列名
分量 一条记录中的一个列值
值的集合,值的取值范围
非规范关系 表中有表

关系

关系模型(relational model)

  • 关系(relation):一个关系对应通常说的一张表
  • 元组(tuple):表中的一行即为一个元组
  • 属性(attribute):表中的一列即为一个属性
  • 主属性(prime attribute):候选码的诸属性
  • 码(key):表中可以唯一确定一个元组的某个属性组,也可以说是主码。
    • 候选码(candidate key):关系的某一属性组的值能唯一地标识一个元组,但是子集不能
    • 主码(primary key):若一个关系有多个候选码,选定其中一个为主码
  • 域(domain):一组具有相同数据类型的值的集合
  • 笛卡尔积:域之间的排列组合。
  • 分量:元组中的一个属性值
  • 关系模式:对关系的描述,一般表示为 关系名(属性1, 属性2, …, 属性n)

关系的三种类型

基本表:实际存在的表,实际存储数据的逻辑表示
查询表:查询结果对应的表
视图表:由基本表或其他视图导出来的表,是虚表,不对应实际存储的数据。

关系的完整性

实体完整性

  • 主属性不能取空值

参照完整性:指的是关系之间存在着属性的引用,比如学生(学号,姓名,专业号),专业(专业号,专业名)。学生这个表参照了专业表里的专业号

  • 上面学生表的专业号可以看作是专业表的专业号的引用,也就是专业表的外码
  • 外码只有两种情况
  • 为空值 专业未确定
  • 非空值 专业确定

用户定义的完整性
用户自己设置的规则,比如某个属性的范围,某个属性必须取为唯一值等。

关系代数

并 差 交 笛卡儿积称为集合运算.
(1) 并(Union)
并是抽取两个表格中所有行的运算,经过并运算后能够抽取两个表格中的所有数据.
(2) 差(difference)
能够调取两张表中其中一张表独有的数据,这种运算叫做差,以不同的表格为基准会获得不同的运算结果.
(3) 交(intersection)
能够调取两张表格共有数据的这种运算叫做交.
(4) 笛卡儿积(Cartesian product)
笛卡儿积是一种可以将两个表格中所有数据排列组合的方法

(5) 投影(projection)
抽取列的运算叫做投影.投影是调取表中某一列.
(6) 选择(Selection)
选择是调取表中某一行的运算.
(7) 连接(join)
连接就是将表格连接起来.外键参照其他表中的主键,通过连接,将两个表格粘合起来. 笛卡尔集中选取合适的;
等值连接 选取某些属性的值相等的那些元组
自然连接 重复的属性列去掉
(8) 除
除就是从’被除表格’中调取’除表格’中包含的所有行,然后再从中去掉’除表格’中所有行的运算.

常用 SQL 操作

对象类型 对象 操作类型
数据库模式 模式 CREATE SCHEMA
基本表 CREATE SCHEMAALTER TABLE
视图 CREATE VIEW
索引 CREATE INDEX
数据 基本表和视图 SELECTINSERTUPDATEDELETEREFERENCESALL PRIVILEGES
属性列 SELECTINSERTUPDATEREFERENCESALL PRIVILEGES

SQL对数据库模式的支持

一些最重要的 SQL 命令

SELECT - 从数据库中提取数据
UPDATE - 更新数据库中的数据
DELETE - 从数据库中删除数据
INSERT INTO - 向数据库中插入新数据
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引

范式

一个低一级范式的关系模式通过模式分解可以转换为若干高一级范式的关系模式的集合,这个过程叫规范化 。//通俗的说,就是为了方便增删改查才转为为各种范式。
第一范式(1NF):属性(字段)是最小单位不可再分。 //不可以一个属性里面的值还可以再分为多个值
第二范式(2NF):满足 1NF,每个非主属性完全依赖于主键

  • (消除 1NF 非主属性对码的部分函数依赖)。 //
    第三范式(3NF):满足 2NF,任何非主属性不依赖于其他非主属性
  • (消 除 2NF 非主属性对码的传递函数依赖)。 //
    鲍依斯-科得范式(BCNF):满足 3NF,任何非主属性不能对主键子集依赖
  • (消除 3NF 主属性对码的部分和传递函数依赖)。
    第四范式(4NF):满足 3NF,属性之间不能有非平凡且非函数依赖的多值依赖
  • (消除 3NF 非平凡且非函数依赖的多值依赖)。

关系模式的简化三元组 R<U,F> F是属性组上面的一组数据依赖。

数据依赖

  • 函数依赖(function dependency):类似于y=f(x) x一旦确定,y就确定了
    • 非平凡的函数依赖 比如(Sno,Cno)->Grade //Grade不属于码
    • 平凡的函数依赖 (Sno,Cno)->Cno //Cno属于码
    • 部分函数依赖 Sno->Sdept,(Sno,Cno)->Sdept //Sdept依赖(Sno,Cno),但是还可以再细分,Sdept依赖于Sdept
    • 传递函数依赖
  • 多值依赖(multi-value dependency): // X Y Z 由X Z的值可以确定一组Y的值。而且Z变一下,还是可以确定一组相同的Y的值,这组Y的值只和X有关的

事务

事务:用户定义的一个数据库操作序列,这些操作要么做,要么不做,是一个不可分割的工作单位
一个程序包含多个事务

事务的开始可以由用户显式控制。如果用户没有显式义,由DBMS按照默认规定自动划分事务。
在SQL中,定义事务的语句一般是三条

1
2
3
BEGIN TRANSCTION;   
COMMIT; //提交事务
ROLLBACK; //回滚,之前完成的操作撤销,回滚到事务开始的状态

事务的ACID特性

原子性:事务要么做要么不做
一致性:事务前后数据的完整性必须保持一致。
隔离性:事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

恢复的实现技术:建立冗余数据 -> 利用冗余数据实施数据库恢复。
建立冗余数据常用技术:数据转储(动态海量转储、动态增量转储、静态海量转储、静态增量转储)、登记日志文件。

并发控制

事务是并发控制的基本单位。
并发操作带来的数据不一致性包括:丢失修改、不可重复读、读 “脏” 数据。
并发控制主要技术:封锁、时间戳、乐观控制法、多版本并发控制等。
基本封锁类型:排他锁(X 锁 / 写锁)、共享锁(S 锁 / 读锁)。
活锁死锁:
活锁:事务永远处于等待状态,可通过先来先服务的策略避免。
死锁:事物永远不能结束
预防:一次封锁法、顺序封锁法;
诊断:超时法、等待图法;
解除:撤销处理死锁代价最小的事务,并释放此事务的所有的锁,使其他事务得以继续运行下去。
可串行化调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同。可串行性时并发事务正确调度的准则

SQL

语言简洁,易学易用

  • 完成核心功能只用了9个动词。

SQL的动词

1
2
3
4
数据查询 SELECT                
数据定义 CREATE,DROP,ALTER
数据操纵 INSERT,UPDATE,DELETE
数据控制 GRANT,REVOKE //grant 授予 revoke 撤销废除

综合统一

  • 集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体

基本操作对象有:模式、表、视图和索引

数据定义

1
2
3
4
5
6
操作对象|   创建         |    删除     |   修改
----------------------------------------------------
模式 CREATE SCHEMA DROP SCHEMA -
表 CREATE TABLE DROP TABLE ALTER TABLE
视图 CREATE VIEW DROP VIEW -
索引 CREATE INDEX DROP INDEX ALTER INDEX

SQL不提供修改模式定义和修改视图定义的操作,如果想修改就只能删除然后重建;
示例

1
2
3
4
5
6
7
CREATE SCHEMA test AUTHORIZATION zhang
CREATE TABLE tab1(COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2)
);
1
2
3
4
删除模式
DROP SCHEMA <模式名> <CASCADE|RESTRICT> //CASCADE和RESTRICT必选1个
CASCADE表示级联,删除模式的时候把模式中的所有数据对象都删除
RESTRICT只有在模式没有任何数据对象的时候才能执行

索引的建立和删除
表太大的时候,查询操作会比较耗时,可以用索引来加快。
在基本表上建立一个或者多个索引,加快查找速度

数据库索引类型

  • 顺序文件上的索引
    • 按属性值降序或者升序的形式建立一个顺序索引文件
  • B+树索引
    • 叶节点为属性值和相应的元组指针
    • 动态平衡的优点
  • 散列索引
    • hash桶存放相应的索引属性值和元组的指针
  • 位图索引
    • 用位向量记录索引属性值中可能出现的值,每个位向量对应一个可能值;

建立索引和删除索引由数据库管理员或者表的建立者负责完成。
但是查询时候是由数据库管理系统自动选择合适的索引,用户不能显式选择。

数据字典

是数据库管理系统中的一组系统表,记录了数据库所有的定义信息
关系数据库执行SQL相关的数据定义语句的时候,实际上就是在更新数据字典表中的信息。

数据查询

1
2
3
4
5
SELECT [ALL|DISTINCT] <目标列表达式> [<目标列表达式 >]... //DISTINCT 取消重复值,ALL 不取消重复值
FROM <表名或者视图名>
[WHERE <条件表达式>] //代表限制条件
[GROUP BY <列名1> [HAVING <条件表达式>] ] //Group分组,比方一个表课程号,选课的人,可以根据课程和分组,作用有点像按某个属性来拆分成多个表。HAVING指定筛选条件
[ORDER BY <列名2> [ASC|DESC]]; //结果按照列名2的值升序或者降序

数据更新

插入数据

1
2
3
INSERT 
INTO student(Sno,Sname,Ssex,Sdept,Sage)
VALUES('201215128','陈','男','IS',18)

修改数据

1
2
3
UPDATE student
SET Sage=22
WHERE Sno='201215121'; //WHERE可以省略,省略时候表示修改表中所有的元组

删除数据

1
2
3
4
//只能删除元组
DELETE
FROM student
WHERE Sno='201215128';

视图操作

1
2
3
4
5
6
CREATE VIEW IS_STUDENT
AS
SELECT Sno,Sname,Sage
FROM student
WHERE Sdept='IS'
WITH CHECK OPTION //可以省略,带上这条语句表示对视图插入修改删除时候会满足where中的条件
1
DROP VIEW <视图名>[CASCADE] //级联代表删除相关联的视图

参考资料

数据库系统概论 王珊 萨师煊
SQL 语法
数据库篇(每位开发者必备)

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×