外观
数据库简介
数据库是按照数据结构来组织、存储和管理数据的仓库,是计算机系统中长期存储、有组织、可共享的数据集合。它不仅是数据存储的物理容器,更包含了一套完整的数据管理机制,是现代信息系统的核心组成部分。
数据库基本概念
数据与信息
数据是描述事物的符号记录,而信息是经过加工处理的有用数据。数据库正是实现数据到信息转换的关键工具。
原始数据 → 数据库处理 → 有用信息
↓ ↓ ↓
数字、文字 存储、查询 决策依据
符号、图形 分析、管理 知识发现数据库系统组成
完整的数据库系统包含四个核心组成部分:
数据库系统
├── 数据库(数据集合)
├── 数据库管理系统(DBMS)
├── 应用程序
└── 用户
├── 终端用户
├── 应用程序员
└── 数据库管理员数据库发展历程
人工管理阶段
20 世纪50年代以前,数据通过人工方式管理:
- 数据与程序紧密耦合
- 数据无法长期保存
- 数据无法共享
文件系统阶段
20 世纪 50-60年代,操作系统提供文件管理功能:
应用程序1 → 文件1
应用程序2 → 文件2
应用程序3 → 文件3问题:数据冗余、不一致、访问困难
数据库系统阶段
20 世纪60年代后期至今,数据库管理系统出现:
多个应用程序 → 数据库管理系统 → 统一数据库实现了数据的集中管理和共享
数据库类型
关系型数据库
基于关系模型,使用表格存储数据:
学生表
学号 姓名 年龄 专业
001 张三 20 计算机
002 李四 19 数学课程表
课程号 课程名 学分
C01 数据库 3
C02 算法 4特点:
- 结构化数据存储
- ACID 事务特性
- SQL 标准查询语言
- 典型代表:MySQL、Oracle、PostgreSQL
非关系型数据库
为满足不同需求场景而发展:
键值数据库
键 → 值
"user:001" → "{name: '张三', age: 20}"
"product:A1" → "{name: '手机', price: 1999}"适用场景:缓存、会话存储
文档数据库
json
{
"user_id": "001",
"name": "张三",
"orders": [
{"order_id": "O1", "amount": 100},
{"order_id": "O2", "amount": 200}
]
}适用场景:内容管理、用户档案
列族数据库
行键 列族:列 值
user001 info:name 张三
info:age 20
order:2023 订单详情适用场景:大数据分析、日志处理
图数据库
(用户A) --关注--> (用户B)
| |
点赞 转发
| |
(帖子) <--包含-- (图片)适用场景:社交网络、推荐系统
数据库管理系统
核心功能架构
应用程序
↓
数据库管理系统
├── 查询处理器
│ ├── DDL编译器
│ ├── DML编译器
│ └── 查询优化器
├── 存储管理器
│ ├── 权限完整性管理器
│ ├── 事务管理器
│ ├── 文件管理器
│ └── 缓冲区管理器
└── 磁盘存储器
├── 数据文件
├── 数据字典
└── 索引文件主要功能组件
数据定义功能
- 定义数据库结构
- 定义数据约束条件
- 存储数据字典信息
数据操纵功能
- 数据查询、插入、删除、修改
- 支持简单和复杂查询操作
事务管理功能
- 保证 ACID 特性
- 并发控制
- 故障恢复
数据安全与完整性
- 用户权限管理
- 数据完整性约束
- 备份与恢复机制
数据库设计
设计过程
需求分析 → 概念设计 → 逻辑设计 → 物理设计 → 实施维护
↓ ↓ ↓ ↓ ↓
收集需求 E-R图 关系模式 存储结构 创建数据库
确定边界 建模 转换 索引设计 数据导入概念设计:E-R 模型
实体 属性 联系
□□□ ────── ◇◇◇
学生 学号 选课
姓名 成绩
年龄实体:现实世界中可区分的事物 属性:实体的特征 联系:实体之间的关系 (1:1、1:n、m:n)
关系模型规范化
消除数据冗余和更新异常:
非规范化表问题:
学生选课表
学号 姓名 课程号 课程名 成绩 教师
001 张三 C01 数据库 85 王老师
001 张三 C02 算法 90 李老师
002 李四 C01 数据库 88 王老师规范化后:
学生表(学号, 姓名)
课程表(课程号, 课程名, 教师)
选课表(学号, 课程号, 成绩)数据库操作语言
数据定义语言
sql
-- 创建数据库
CREATE DATABASE school;
-- 创建表
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT CHECK (age >= 0),
major VARCHAR(100)
);
-- 创建索引
CREATE INDEX idx_student_name ON students(name);数据操纵语言
sql
-- 插入数据
INSERT INTO students (id, name, age, major)
VALUES (1, '张三', 20, '计算机科学');
-- 查询数据
SELECT name, major FROM students WHERE age > 18;
-- 更新数据
UPDATE students SET age = 21 WHERE id = 1;
-- 删除数据
DELETE FROM students WHERE id = 2;复杂查询操作
sql
-- 多表连接查询
SELECT s.name, c.course_name, sc.grade
FROM students s
JOIN scores sc ON s.id = sc.student_id
JOIN courses c ON sc.course_id = c.id;
-- 聚合查询
SELECT major, AVG(age) as avg_age, COUNT(*) as count
FROM students
GROUP BY major
HAVING COUNT(*) > 10;
-- 子查询
SELECT name FROM students
WHERE id IN (SELECT student_id FROM scores WHERE grade > 90);事务处理
ACID 特性
原子性:事务的所有操作要么全部完成,要么全部不完成
开始事务
操作1 → 成功
操作2 → 失败
回滚事务一致性:事务执行前后数据库都处于一致状态
隔离性:并发事务之间互不干扰
持久性:事务提交后对数据库的改变是永久的
并发控制
问题场景:
事务T1 事务T2
读A=100
读A=100
A=A-50 写A=150
写A=50
提交结果:A 最终为 150,丢失了 T1 的更新
解决方案:锁机制、时间戳、多版本并发控制
数据库技术发展趋势
新型数据库架构
分布式数据库
应用层
↓
中间件
↓
节点1 节点2 节点3
DB1 DB2 DB3云数据库
- 数据库即服务
- 自动扩缩容
- 按需付费
内存数据库
- 数据常驻内存
- 极高读写性能
- 适合实时应用
技术融合创新
多模数据库:支持多种数据模型 时序数据库:优化时间序列数据处理 区块链数据库:不可篡改的分布式记账
数据库技术经过数十年的发展,已经从单纯的数据存储工具演变为支撑现代数字经济的核心基础设施。随着大数据、人工智能和云计算技术的快速发展,数据库技术继续向着更智能、更分布式、更专业化的方向演进。