CREATE TABLE users ( id BIGINT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE);CREATE TABLE orders ( id BIGINT PRIMARY KEY, user_id BIGINT NOT NULL, status VARCHAR(20) NOT NULL, FOREIGN KEY (user_id) REFERENCES users(id));
关系模型核心概念
术语
说明
关系
一张表
元组
一行记录
属性
一列字段
候选键
能唯一标识元组的最小属性集
主键
从候选键中选出的主要标识
外键
引用其他表主键的字段
关系完整性约束
实体完整性 — 主键不能为空且不重复
参照完整性 — 外键必须存在或为 null
用户自定义完整性 — 业务规则 (如 price >= 0)
范式化
函数依赖
Text
UTF-8|1 Line|
X -> Y (X 能唯一确定 Y)
部分函数依赖: (学号, 课程号) → 学生姓名 (姓名只依赖学号)
传递函数依赖: 学号 → 学院ID → 学院名
三范式
范式
要求
1NF
字段不可再分 (原子性)
2NF
在 1NF 基础上,非主键字段完全依赖于主键
3NF
在 2NF 基础上,无传递函数依赖
BCNF
每个决定因素都是候选键
模式分解
范式化通过模式分解实现,需保证:
无损连接 — 分解后可通过连接还原
保持依赖 — 分解后不丢失函数依赖
反范式化
在查询频繁的场景中,有意保留冗余数据以提升性能,如订单快照商品名称和价格。
Text
UTF-8|1 Line|
适用场景:高频查询、关联成本高、需要历史快照、读写少
事务 ACID
特性
说明
原子性
全部成功或全部回滚
一致性
事务前后满足所有约束
隔离性
并发事务互不干扰
持久性
提交后结果永久保存
并发问题
问题
说明
脏读
读到未提交事务的数据
不可重复读
同一事务两次读同一行结果不同
幻读
同一事务两次查询范围,结果集不同
锁
共享锁 (S锁):读操作使用,允许多个事务同时读
排他锁 (X锁):写操作使用,禁止其他事务读写
两段锁协议:事务分扩展阶段(只加锁)和收缩阶段(只释放锁),可保证可串行化。
其他约束
SQL
UTF-8|6 Lines|
CREATE TABLE products ( id BIGINT PRIMARY KEY, name VARCHAR(100) NOT NULL, price DECIMAL(10, 2) CHECK (price >= 0), stock INT DEFAULT 0);