Work Better Than Yesterday!

zhangge's stupid and messy life


Home| Life| Technique Concentrate On One Thing.

关系型数据库

27 Sep 2012

虽然自己是一个开发,不是从事DBA(Database Administrator)工作的,但是,作为一个软件工程师,必须具备一个DBA的能力。下面这些都是学习数据库课程的笔记。

1.数据库(DB)、数据库管理系统(DBMS)、元数据

数据库是以一定结构存储在一起且相互关联的、结构化数据集合。更进一步地说,数据库不仅存放了数据,而且还存放了数据与数据之间的关系。一个数据库系统中通常有多个数据库,每个库由若干张表(Table)组成。包含了这些元素:用户数据表、系统数据表、视图、索引、触发器、存储过程。

数据库管理系统(Database Manage System,DBMS)是一种专门描述数据库、管理数据库、维护数据库,并提供对数据库访问的软件系统。包括这些功能:创建数据库和表、创建支持结构如索引等、读取/修改/维护数据库数据和结构、执行规则、并发控制、提供安全性、执行备份和恢复。

元数据是一种专门描述数据库结构的数据,存储在数据字典中,即数据库的系统表内。元数据可用于描述表、列、约束、索引等。元数据的访问方式包括:使用系统存储过程与系统函数访问,使用信息架构视图访问,使用系统表访问。

索引是对数据库表中一列或者多列的值进行排序的一种结构,是用索引可以快速访问数据库表中的特定数据

2.关系模型

2.1实体与关系

实体(entity)代表事物在数据逻辑模型世界中的抽象表示形式。关系(relation)是指存放实体数据的二维表。但是不是所有二维表都是关系。在关系数据库模型中,采用“关系”来存储“实体”中的数据。

关系表有这些特征:行存储实体的数据、列存储实体属性的数据、表中单元格存储单个值、每列具有唯一名称、列顺序可任意、行顺序可任意、任意两行互不重复。

2.2主键、外键和参照完整性约束

键(key)标识关系中唯一行的一个或一组属性。因为关系不允许出现重复行,所有每个关系都必须至少有一个由关系中所有属性组合而成的键。键有时候也称为逻辑键。在有些关系型DBMS产品中,为了提高访问和排序速度而对列建立索引,有时也称为物理键。

主键(primary key)是在关系中能够唯一的标识一行的属性或属性组中选出作为整个关系的键。主键的作用包括:唯一标识关系的每行、作为关联表的外键,链接两个表、使用主键值来组织关系的存储、使用索引快速检索数据。

外键(foreign key)是除了在一个关系中作为主键外,还在其他关系中作为关系的属性。在关联的两个关系中,它们具有一个或多个相同属性。若它在第一个关系中作为主键,则在第二个关系中作为外键。

参照完整性是指外键取值必须与现有主键值对应。

3.结构化查询语言

SQL( Structured Query Language,结构化查询语言 )是一种对数据库进行访问与操作的计算机标准语言。可以说每一个数据库都有一套自己的标准,例如mysql,oracle,sysbase,db2等等。

3.1数据定义语言DDL

数据定义语言(Data Definition Language,DDL)是SQL语言中用于创建或删除表的语言。也可以定义索引(键),规定表之间的链接,以及施加表间的约束。主要语句如下包括:CREATE DATABASE创建新数据库、ALTER DATABASE修改数据库、CREATE TABLE创建新表、ALTER TABLE变更(改变)数据库表、DROP TABLE删除表、CREATE INDEX创建索引(搜索键)、DROP INDEX删除索引。

基本数据类型

字符:CHAR、VARCHAR、TEXT
整数:SMALLINT、INTEGER
浮点数:NUMBER(n,d)、FLOAT(n,d)
日期:DATE、DATATIME
货币:MONEY

3.3数据操纵作语言

数据操纵语言(Data Manipulation Language,DML)是SQL语言中用于查询和增删修改表数据的语句,主要语句如下:SELECT从数据库表中获取数据、UPDATE更新数据库表中的数据、DELETE从数据库表中删除数据、INSERT向数据库表中插入数据。

3.4什么是视图View

视图是一种通过其它表或视图构建的虚拟表。它本身没有自己的数据,而是使用了存储在表或其它视图中的数据。视图可以用来隐藏结果集的行或列,以达到阻止显示一些敏感数据。可以不需要输入计算表达式,就能显示出被计算列的结果。将复杂的SQL语句隐藏,给用户提供简单的操作语句。在SQL语句中,不能将计算或内置函数作为WHERE子句的一部分,然而,可以通过构建计算变量视图解决。

create view epview as select * from emp;

4.数据建模

4.1数据库的开发步骤

数据库需求分析:获取表单,业务规则,数据约束,描述数据关系,数据处理要求,创建数据概念模型。
数据库设计:设计数据库系统结构,数据逻辑模型,物理模型,设计数据库表,视图,设计表关联,约束,索引。
数据库实现:实现物理模型,数据上线,系统测试。

4.2标识符和主键

标识符是指标识不同实体实例的属性,标识符可以是一个或多个属性。
标识符与主键的区别是标识符是一个逻辑概念,标识符不一定唯一。

4.3弱实体,强实体

弱实体是指只有依赖其他实体才可以存在于数据库中的实体。
强实体是指非弱实体。
弱实体的标识符依赖于强实体的标识符即标识符依赖实体。

4.4二元关系

二元关系包括一对一,一对多,多对多关系。

5.数据库设计

5.1概念模型转化成物理模型

PS:参考powerdesigner的blog。

第一步:为每个实体创建一个表
第二步:规范化所有表
第三步:创建表之间的主外键约束

把概念模型转换成物理模型,之间的对应关系

实体(概念模型) —关系(逻辑模型) —表(物理模型)
属性(概念模型) —列(物理模型)
标识符(概念模型) —主键(物理模型)

5.2范式

第一范式:关系中的属性不可再细分
第二范式:满足一,并消除了关系中的属性部分依赖
第三范式:满足二,并切断了关系中的属性传递依赖
BCNF范式:所有函数依赖的决定因子都是候选键
第四范式:满足BCNF,并消除多值依赖(删除表中的多对多关系),即表中不能包含一个实体的两个或者多个相互独立的多值因子

多值依赖:在关系模式中,函数依赖不能表示属性值之间的一对多联系,这些属性之间有些虽然没有直接关系,但存在间接的关系,把没有直接联系、但有间接的联系称为多值依赖。

规范化逆操作:由于规范化产生过多的表,为了提高访问效率和简化编程处理,可以将一些不会产生异常的表进行合并。

6.数据库管理

6.1事务

事务:完成单一逻辑工作单元的操作集合,操作序列要么完整执行,要么都不执行,以保证数据的完整性。
特性:原子性,一致性,隔离性,持久性。
原子性(Atomicity)是指或者执行事务中所有的操作,或者不执行任何一个操作。
持久性(Consistency)是指事务中所有提交的修改都是永久的,DBMS不会取消这些修改。
一致性(Isolation)是指语句级的一致性(语句执行过程中其它事务不能对当前语句访问的数据进行修改)、事务级的一致性(不允许两个事务同时对同一数据源进行处理)。
持久性(Durability)是指事务完成后,数据的改变是永久的。

事务并发处理需要处理的问题:

1.丢失更新问题
当两个用户并发处理相同数据时,当其中一个更新了数据后另一个用户的数据已经失效。

2.脏读取:一个事务读取了尚未提交到数据库但已经修改的记录。

3.不可重复读取:一个事务读取了另一个事务修改后又取消了的数据。

4.幻象读取:事务重新读取数据时发现读取该数据后已有其他事务插入新数据。

原因:当多个事务同时存取同一数据时,由于不同操作时序,可能出现存取不正确的数据,破坏数据库的一致性。

6.2锁

在并发处理两个或多个事务时,如果数据库操作结果在逻辑上同事务以串行方式处理结果保持一致,则称为串行模式。
一个给定的并发调度,当且仅当它是可串行化的,才能保证正确调度。

保证可串行化的一个协议是:二阶段锁定协议。

增长阶段:事务可以获得锁,但是不能释放锁。
缩减阶段:事务可以释放锁,但是不能获得新锁。

锁的粒度:数据库,表,页面,行。

乐观锁定:只要不冲突就不锁。
悲观锁定:只要处理事务就锁定。

乐观锁定过程:读取数据、处理事务、执行更新、冲突检查、如果冲突回滚事务,重新开始事务,否则提交事务。
悲观锁定过程:锁定所需的资源、读取数据、处理事务、执行提交、释放锁定。

死锁原因:当多个用户同时锁定两个以上资源时,可能会出现谁都无法运行的死锁状态。

防止死锁策略:
1.允许用户一次发出当前所需要全部资源的锁定,使用完后再释放给其他用户。
2.规定所有应用程序锁定资源的顺序必须完全相同。

死锁解决办法:回滚其中的一个事务,并消除它对数据库所做的改动。

游标是一种指针,指向从sql select语句得到的结果集。


Sunday don't come easily! Subscribe to RSS Feed