Document

数据库分析与设计
王有天
湖北经济学院
市场
表
现
层
界面
物流
业
务
流
程
用
户
用
户
用
户
用
户
用
户
业
务
控
制
业
务
支
持
…
信息流
权限管理程序
用
户
业
务
经
营
4
2
现金流
业
务
流
程
3
1
业
务
流
程
……
业
务
流
程
用
户
用
户
用
户
用
户
控
制
层
用
户
控
制
用户管理程序
业务处理指令,往往体现为SQL的批处理。
数据处理指令:比如SQL。
数据库管理程序
数据
电子商务系统软硬件环境
数
据
层
数据
商务系统B/S;C/S
邮箱
域名
分布式软件系统(B/S;C/S. P2P)
2015/10/1
2
数据层
频
经营
用户
使用
道
数据发布程序
开发人员维护
数据库
数据资源层
内容输入界面
开发人员维护
逻辑控制层
内容输入
频道
市场
业务经营层
用户
需求
价值实现层
• 数据是企业信息系统的核心。
2015/10/1
3
对数据的管理系统
• 数据库
– DBMS
• DataBase Management System
2015/10/1
4
为什么要有DBMS
• 数据完整性
• 事务的处理
– 如:转账事务
• 相对独立的系统模块
– 数据与程序分开。
– 软件的相对独立研发
• 集成数据处理的机制。
– 故障恢复
• Log
– 权限
2015/10/1
5
DBMS特点
• 封装
– 不能通过DBMS以外的渠道访问数据库。
– 否则破坏完整性、一致性。
•
•
•
•
支持事务处理
能够故障恢复
控制访问
并发操作
2015/10/1
6
DBMS的发展
• 图书馆/资料库
– 如果管理不善,就不能成为系统。
–人
• 文件系统
– 没有封装;没有事务处理;没有故障恢复。
• 数据库
2015/10/1
7
DBMS的分类
• 网络型/层次型
• 关系型
• 扩展
– 面向对象
– 模糊数据
– 多媒体数据库
– 网络文件管理
2015/10/1
8
关系型数据库
• 数据存储在表中
学号 姓名 性别
1
张三 男
2
李四 女
3
2015/10/1
账号 名称 密码 学生
1
2
3
a
b
c
课程
1
2
3
名称
电商
信息
…
1
2
3
1
2
1
9
Entity Relation
账号1
学生1
张三
2015/10/1
10
关系种类:
• 1:n
• n:m
学号 姓名 性别
– 学生和课程
学号
1
1
3
2015/10/1
课程
1
2
2
1
张三 男
2
李四 女
3
课程
1
2
3
名称
电商
信息
…
11
关系型数据库的优点
• 记录等长
– 检索快。
• 例如:总记录个数。
• 某个字段值
2015/10/1
12
基本词汇
• 表
– 字段
– 记录
•
•
•
•
•
字段
关键字段
记录
记录的字段值
关系
– 定义某个表中某字段的值取自另外一个表
2015/10/1
13
记录的增加删除更新
• 记录没有顺序。
– 查询语言可以按字段排序。
• 删除记录
– 取决于DBMS
• 一般作标记,重用空间。
• 可以压缩表。但DBMS一般不自动进行。
• 增加记录
– 删除记录或最后
• 更新记录
– 定位到记录字段,覆盖。
2015/10/1
14
约束和触发器
• 字段
– 取值范围
• 某个记录必须符合某个范畴。
• 更复杂的约束需要触发器。
2015/10/1
15
数据库中表和类的关系
• 表
– 固定字段,表示某一类对象。
– 每个记录相当于类的实例。
– 每个字段值相当于实例的属性或者与其他实例
的关系。
• 非同类的数据存储在同一个表,并不适合。
2015/10/1
16
记录和语句的关系
• 每个记录相当于符合特定语法的语句。
• 表示一定的语义。
• Null表示不知道
– Null的运算
2015/10/1
17
关系型数据库的范式
• 第一范式:
– 字段的原子性。要么视
为原子。要么应该再分。
– 否则不便查询。
字段1
字段2
字段3
字段3.1
2015/10/1
字段4
字段3.2
18
第二范式
• 非关键字段完全函数依赖于关键字段。
– 函数依赖
• y=f(x); 不能说y=f(x)附近。
2015/10/1
19
不符合第二范式造成问题
• 假定选课关系表为SelectCourse(学号, 姓名, 年龄,
课程名称, 成绩, 学分)
– 关键字为组合关键字(学号, 课程名称),因为存在如下
决定关系:
(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)
• 这个数据库表不满足第二范式,因为存在如下决
定关系:
– (课程名称) → (学分)
– (学号) → (姓名, 年龄)
– 即存在组合关键字中的字段决定非关键字的情况。
2015/10/1
20
不符合第二范式造成问题
• 数据冗余:
同一门课程由n个学生选修,“学分”就重复n-1次;同一个学生选
修了m门课程,姓名和年龄就重复了m-1次。
• 更新异常:
若调整了某门课程的学分,数据表中所有行的“学分”值都要更
新,否则会出现同一门课程学分不同的情况。
•
•
插入异常:
假设要开设一门新的课程,暂时还没有人选修。这样,由于还没
有“学号”关键字,课程名称和学分也无法记录入数据库。
删除异常:
假设一批学生撤销某些课程的选修,这些选修记录就应该从数据
库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很
显然,这也会导致插入异常。
2015/10/1
21
不符合第二范式造成问题
• 冗余
– 重复的数据
• 更新麻烦
• 更新不一致造成冲突
• 冗余的根源在于
– 非关键字段不是由关键字段完全决定。
– 部分就能决定,结果另外一部分关键字改变时,
非关键字段重复。
2015/10/1
22
关系型数据库的范式
• 第三范式
– 非关键字段之间不存在传递依赖。
– 否则存在冗余。
• 冗余带来同样的问题。
2015/10/1
23
适当的冗余
• 适当的冗余
– 造成重复但可能提高性能。
– 如index是故意的冗余。
• 照顾语义。
2015/10/1
24
数据库设计的多样性
• 对同一件事情描述方法可以不同。
• 因此数据库的结构有所不同。
• 但这些数据库中的数据应该是等价的。
– 可以相互推导。
2015/10/1
25
关系型数据库的数据操作
• DBMS完成。
• RDBMS支持查询语言SQL
• SQL=Structured Query Language
– 是一个语言规范。DBMS一般支持该规范,并
有自己的扩展。
– 查询和操作:增删改查
2015/10/1
26
SQL的组成(分类)
CREATE
DATABASE
TABLE
VIEW
INDEX
SQL DDL:
ALTER
DROP
SQL QUERY:SELECT
INSERT
SQL SQL DML: UPDATE
DELETE
GRANT
SQL DCL: REVOKE
2015/10/1
… FROM …
…
…
…
27
增加记录
• Insert Table1(Field1,…) Values(…,…)
• Insert Table1(Field1,…)
Select …
2015/10/1
28
更新
• Update Table1
Set Field1=…, Field2=…
Where …
2015/10/1
29
删除
• Delete Table1
Where…
2015/10/1
30
Select, Where
• 筛选记录
– Select Field1, Field4 from Table1
• Where (Field1=‘张三’ and Field2=2) or Field1=‘李
四’
• 筛选条件
– Like
– Between And
– >,>=,<,<=,=
2015/10/1
31
Join, On
竖着连接表,按一定条件
• Table1 join Table2 on
Table1.Field1=Table2.Field1
– Left Join
– Right Join
• 对于连接的表可以进行查询(如选择)
2015/10/1
32
Into
查询结果存储在表中
• Select Table1.Field1,…
into NewTable1
From …
2015/10/1
33
Union
竖着合并表
Select Field1,…
From Table1
Where …
Union
Select Field1,…
From Table2
Where
2015/10/1
34
交叉表查询
部门
人员
季
度
销售收
入
销售1部
张三
1
300000
销售1部
张三
2
560012
销售1部
张三
3
62000
销售1部
张三
4
329910
0
销售2部
李四
2
3780
销售2部
王五
2
328999
销售2部
王五
3
221411
1
销售2部
王五
4
234999
9
销售1部
张三
1
2425
销售1部
张三
2
3566
销售1部
张三
3
134213
销售1部
张三
4
233
销售2部
王五
4
2342
2015/10/1
TRANSFORM Sum(销售收入) AS 销售收
入之总计
SELECT 部门, 人员
FROM 销售
GROUP BY 部门, 人员
PIVOT 季度;
部门
人员
1
2
3
销售1部
张三
302425
563578
销售2部
李四
3780
销售2部
王五
328999
4
196213
3299333
2214111
2352341
35
as
• 字段别名和表别名
• 表别名允许给表另起一个名字,相当于将
表复制一遍参加查询。
– 视为单独的表,临时。
2015/10/1
36
Group by
• 进行分组集合运算
2015/10/1
37
Having, Where
• Where 决定哪些元组被选择参加运算,作
用于关系中的元组
• Having 决定哪些分组符合要求,作用于分
组
2015/10/1
38
Order By
• 排序
– Desc
– Asc
2015/10/1
39
In,Exists
SELECT
FROM …
WHERE S# IN
( SELECT S#
FROM Student
WHERE Course = ‘C1’ );
2015/10/1
40
In, Exists
SELECT SN
FROM S
WHERE EXISTS
( SELECT *
FROM SC
WHERE S.S#=SC.S#
AND C#=‘C1’ );
2015/10/1
41
查询的图形化-QBE
2015/10/1
42
查询的图形化
2015/10/1
43
权限管理语言的图形化
2015/10/1
44
电子商务系统中对SQL的调用
• DBMS可以批处理SQL语句。
• 电子商务系统调用SQL
– 效率更高
– 安全,保持数据完整性。
– 支持事务。
2015/10/1
45
事务处理
• 事务
– 一组数据操作,要么成功要么失败。
• SQL
BEGIN TRANSACTION
…
COMMIT
ROLLBACK
2015/10/1
46
事务特点
• Atomicity
• 事务是数据库的逻辑工作单位,事务中包括的诸操作
要么都做,要么都不做。
• Consistency
• 事务执行的结果必须是使数据库从一个一致性状态变
到另一个一致性状态
• Isolation
• 一个事务的执行不能被其他事务干扰。并发执行的各
个事务之间不能互相干扰。
• Durability
• 一个事务一旦提交,它对数据库中数据的改变就应该
是永久性的。
2015/10/1
47
故障恢复
• 出现异常。造成事务中断。比如断电。
– 此时数据可能不一致。
– 单独的数据库文件难于解决该问题。
• Log
– 写入数据库文件前,先写日志。在日志中保留
恢复信息。
– 在数据库文件写成功后,在日志中标记。
– 检查日志。没有成功的写入应该尝试再写或者
放弃。
2015/10/1
48
日志格式
• 每条日志记录的内容
– 事务标识
– 操作类型(插入、删除或修改)
– 操作对象(记录ID、Block NO.)
– 更新前数据的旧值(对插入操作而言,此项为
空值)
– 更新后数据的新值(对删除操作而言, 此项为
空值)
2015/10/1
49
故障恢复
• 系统重启时,
– 如果日志完整,向前继续执行事务
– 如果日志不完整,撤销该事务。
2015/10/1
50
数据库软件
• 一般是关系型的
– 文件型
• Access
– 没有日志。
– 服务
• Oracle
• Ms Sql Server
• MySQL
2015/10/1
51
数据库软件
• 这些软件都支持SQL,并扩展。
– SQL Server下的T-SQL
2015/10/1
52
SQL Server简介
• 原来为另外一家公司产品,后被微软收购。
最新版本2005。
• 支持.net。
– 可以定义类型
– 可以定义函数、存储过程、触发器等。
– 支持xml
2015/10/1
53
SQL Server安装
• 安装时会检查:
– 至少512M,建议1G内存。
– 安装在Windows Server 2003
• 需要Service pack较新版本
– 最好安装有.net
2015/10/1
54
SQL Server数据库文件
• 管理多个数据库
• 数据库文件
– 一个或多个文件组
• 每个文件组有一个或多个文件。
• 分布在多个磁盘上可以并行读取。
• 不放在压缩磁盘上。
• 日志
2015/10/1
55
连接
• 可以用客户端连接。比如:
– 刚才的Management Studio
– Access
– 理解为一种服务/客户端使用关系。
• 程序连接
– 比如:Asp.net中建立SqlConnection对象,指
定数据库位置(地址)、用户名、密码、数据库
2015/10/1
56
管理
2015/10/1
57
Mgmt Studio: T-SQL
2015/10/1
58
Access+SQL Server
Access文件
Access程序
SQL Server Mgt. Studio
2015/10/1
SQL Server服务
59
Access + SQL Server
2015/10/1
60
新建
2015/10/1
61
浏览
2015/10/1
62
2015/10/1
63
2015/10/1
64
2015/10/1
65
2015/10/1
66
2015/10/1
67
2015/10/1
68
2015/10/1
69
2015/10/1
70
2015/10/1
71
2015/10/1
72
2015/10/1
73
Access + SQL Server 实际例子
2015/10/1
74
2015/10/1
75
T-SQL
• 除了标准SQL外,支持更多功能。
• 可以有变量、逻辑控制,因此可以编程。
• SQL Server 2005支持在.net环境中编程,
如类型、触发器等。
2015/10/1
76
T-SQL
2015/10/1
77
数据库空间
• 一般单独提供。
• 目前市场上提供的数据库空间有:
– MySQL
– MS Sql Server
– Oracle较少。
• 价格差不多。
2015/10/1
78
数据库的维护
•
•
•
•
•
备份
复制/分布
数据完整性
权限控制
安全性
2015/10/1
79
数据库的备份
• 用于在系统发生故障后还
原和恢复数据。
• 对于例行的工作(例如,
将数据库从一台服务器复
制到另一台服务器、设置
数据库镜像、政府机构文
件归档和灾难恢复)也很
有用。
2015/10/1
80
数据备份和差异备份
• 数据备份是指包含一个或多个数据文件的完整映
像的任何备份。
– 数据备份会备份所有数据和足够的日志,以便恢复数
据。可以对整个或部分数据库,或者一个或多个文件
进行数据备份。
• 差异备份是基于之前进行的数据备份而言的。
– 它仅包含自数据备份之后更改的页面区。此数据备份
称为“基准备份”或差异“基准”。如果存在相应的
基准备份,则可以对整个或部分数据库,或者一个或
多个文件执行差异备份。
2015/10/1
81
数据库的复制
• 复制是一组技术,它将数据和数据库对象
从一个数据库复制和分发到另一个数据库,
然后在数据库间进行同步,以维持一致性。
• 使用复制,可以在局域网和广域网、拨号
连接、无线连接和 Internet 上将数据分发到
不同位置以及分发给远程或移动用户。
2015/10/1
82
OLAP vs OLTP
• OLTP=OnLine Transactions Processing
– 生产用
– 使用频率频繁
– 更新
• OLAP=OnLine Analysis Processing
– 分析用
– 使用频率周期性
– 只读
2015/10/1
83
数据库设计文档
• 说清楚数据库各对象的语法和语义
– 包括表、约束等。
2015/10/1
84
数据库设计案例
• 网上书店
价值流
邮费
书
书
库存
书+邮费
物流服务
书
书
经销商
供应商
邮费
钱
现金
书
购买者
书费+邮费
钱
钱
书
钱
书费+邮费
书费+邮费 +汇费
手续费
金融
2015/10/1
85
作业
• 利用Access或SQL Server建立数据库。
• 建立本讲提到的账号、学生、课程三个表。
建立它们之间的关系。
• 尝试各种查询操作。
2015/10/1
86