数据库概述
这篇梳理数据库的基础理论:数据与信息、数据库系统的特点、数据模型、E-R 模型,以及关系模式规范化(范式)。这些是动手写 SQL 之前需要建立的概念基础。
常见数据库产品
| 产品 | 厂商 / 平台 |
|---|---|
| Access | 微软,桌面级 |
| MS-SQL(SQL Server) | 微软平台 |
| MySQL | 开源,跨平台 |
| DB2 | IBM |
| Oracle | 主要运行于 Unix / Linux |
数据库能做什么
- 存储大量数据,方便检索和访问。
- 保持数据信息的一致、完整。
- 支持共享与安全控制。
- 通过组合分析,产生新的有用信息。
数据管理基本概念
- 数据:描述事物的符号记录(数字、文字、图形、图像、声音等)。
- 信息:能够通过文字、图像、声音、符号、数据等为人类获知的知识。
- 数据管理:对数据的分类、组织、编码、存储、查询和维护。
- 数据处理:对数据进行加工、将数据转换成信息的过程。
数据管理的发展经历了三个阶段:人工管理 → 文件系统 → 数据库系统。
数据库系统的特点
- 数据结构化:用特定的数据模型表示事物以及事物之间的联系。
- 数据共享性高:减少数据冗余,减少更新异常。
- 数据独立性强:程序和数据相对独立。
- 数据粒度小:粒度单位是记录中的数据项,粒度越小处理越快、越方便。
- 独立的数据操作界面:通过命令或界面(菜单、工具栏、对话框)访问和处理数据。
- 统一管理和控制:数据定义、操纵和控制由数据库管理系统(DBMS)统一管理。
数据模型
常见的数据库模型有三种:
- 层次模型:树形结构,一对多。
- 网状模型:图状结构,多对多。
- 关系模型:二维表结构,是目前的主流(SQL Server、MySQL、Oracle 都属此类)。
数据库基本术语
数据库就是"数据"的"仓库",由表、关系以及操作对象组成:
- 数据存放在表中。
- 表由记录(行)组成,一个记录就是一个实体对象。
- 记录由字段(列)组成,每一列都是一个属性描述。
- 字段由字符或数字等组成。
不可用多行或多列来描述同一个记录或字段:一行就是一条记录、一列就是一个字段,二者一一对应。
DBMS 与数据库系统
**DBMS(DataBase Manager System,数据库管理系统)**是执行数据库管理任务所需的软件,必须基于计算机操作系统才能安装和运行。
一个完整的数据库系统通常由以下部分组成:数据库、数据库管理系统、应用系统、数据库管理员和用户。其中相关人员包括:
- 最终用户
- 应用程序员
- 数据库管理员(DBA)
E-R 模型
**E-R 模型(Entity-Relationship,实体-联系模型)**由 P.P.S. Chen 于 1976 年提出,用 E-R 图表示实体及其联系,是概念模型的一种,广泛用于数据库设计。
绘制 E-R 图的图形元素:
| 图形 | 含义 |
|---|---|
| 长方形框 | 实体集(考虑问题的对象) |
| 菱形框 | 联系(实体集间的联系) |
| 椭圆形框 | 实体集和联系的属性 |
| 直线 | 连接相关的联系与实体,可标注联系的种类(1:1、1:n、m:n) |
E-R 图设计原则:
- 真实性:实体集和属性应反映客观现实。
- 避免冗余:任何事物只表达一次,否则浪费空间且易出错。
- 简单性:避免引入过多元素,尽量简单明了。
- 合理选择元素类型。
E-R 图是设计数据库的指导思想,主要体现表与表之间的逻辑联系。
关系模式的规范化
关系数据库的设计主要是关系模式设计,其好坏直接影响数据库设计的成败。把关系模式规范化,是得到较好关系模式的途径。规范化的关系模式称为关系范式。
未规范化数据库的缺点:数据冗余大、一致性差、修改复杂,插入/删除/更新时会产生异常。规范化后则尽量去除冗余、保持一致、修改简单、消除异常,表一般也比较小。
| 范式 | 核心要求 |
|---|---|
| 第一范式(1NF) | 每个属性都是不可再分的单一属性。记作 R∈1NF |
| 第二范式(2NF) | 在 1NF 基础上,每个非主属性都完全依赖于主码,消除部分依赖 |
| 第三范式(3NF) | 在 2NF 基础上,非主属性不传递依赖于主码(消除 关键字→非关键字 x→非关键字 y 的链) |
| 第四范式(4NF) | 消除主键列与非主键列之间不受约束的一对多关系(多值依赖) |
| 第五范式(5NF) | 将表分割成尽可能小的块,排除所有冗余(连接依赖) |
完全依赖指不存在仅依赖主关键字一部分的属性;若存在,应把该属性和主关键字的这一部分分离出来形成新实体,新实体与原实体之间是一对多关系。范式是设计关系数据库的指导思想,主要体现在表与属性之间。
其他基础术语
- SQL(Structured Query Language,结构化查询语言):用于定义和查询数据库的语言。
- DBA(DataBase Administrator):数据库管理员。
最后更新于