数据库基础知识
数据库相关核心定义
- 数据库(DB):由数据库管理系统管理的、有组织的信息集合,是数据的存储载体。
- 数据库管理系统(DBMS):操纵和管理数据库的大型软件,负责数据库的建立、使用和维护,是用户与数据库的交互接口(如 MySQL、Oracle)。
- 数据库系统(DBS):由软件(DBMS)、数据库(DB)和数据库管理员(DBA)组成的完整系统。
- 数据库管理员(DBA):负责全面管理和控制数据库系统的角色,保障数据库的稳定运行。
数据模型核心概念
- 元组:关系表中的每一行(每条记录),是数据的基本存储单元。
- 码:能唯一标识实体的属性(对应表中的列)。
- 候选码:属性或属性组,其值可唯一标识元组,且任意子集无法单独标识(如学生表中 "学号""姓名 + 班级" 可能均为候选码)。
- 主码(主键):从候选码中选定的唯一标识元组的属性 / 属性组,一个表仅能有一个主码,不可重复且不允许为空。
- 外码(外键):一个关系中的属性,对应另一个关系的主码,用于建立表间关联,可重复且允许为空,一个表可有多个外码。
- 主属性:包含在任意候选码中的属性(如学生表中 "学号""身份证号")。
- 非主属性:未包含在任何候选码中的属性(如学生表中 "姓名""年龄")。
ER 图(实体联系图)
ER 图是数据库概念结构设计的核心工具,用于梳理实体间关系,由三大要素组成:
- 实体:现实世界的业务对象(如学生、课程、教师),用矩形框表示。
- 属性:描述实体的要素(如学生的 "学号""姓名"),用椭圆形表示。
- 联系:实体间的关联关系(如学生 "选课" 课程),用菱形表示,支持三种数量关系:1:1(一对一)、1:N(一对多)、M:N(多对多)。
数据库范式(设计规范)
范式的核心目的是减少数据冗余、避免插入 / 修改 / 删除异常,常用核心范式有三级:
- 1NF(第一范式):属性不可再分,即表中字段需为原子值(如 "联系方式" 不可拆分为 "电话 + 邮箱",需单独设列),是关系型数据库的基础要求。
- 2NF(第二范式) :在 1NF 基础上,消除非主属性对主码的部分函数依赖(非主属性需完全依赖于整个主码,而非主码的子集),通常需通过拆分表实现。
- 3NF(第三范式) :在 2NF 基础上,消除非主属性对主码的传递函数依赖(非主属性不可通过其他非主属性间接依赖主码,如 "学号→系名→系主任" 需拆分为学生表和系表)。
关键依赖概念
- 函数依赖:若 X 的值可唯一确定 Y 的值,则 Y 依赖于 X(X→Y)。
- 部分依赖:Y 依赖于 X 的真子集(如 "姓名" 依赖于 "学号 + 班级" 中的 "学号")。
- 传递依赖:X→Y、Y→Z,且 Y 不依赖 X,则 Z 传递依赖于 X。
主键和外键的区别
| 对比维度 | 主键(主码) | 外键(外码) |
|---|---|---|
| 核心作用 | 唯一标识表中元组 | 建立表间关联关系 |
| 唯一性要求 | 必须唯一 | 可重复 |
| 空值允许 | 不允许为空 | 允许为空 |
| 数量限制 | 一个表仅能有一个 | 一个表可有多个 |
外键与级联的使用建议
- 不推荐使用的原因(阿里开发手册强制要求) :
- 增加复杂性:开发和测试需考虑外键约束,需求变更时修改成本高;
- 消耗数据库资源:数据库需额外维护外键关联,增删改时需触发校验;
- 不支持分库分表:分布式场景下外键约束失效;
- 存在更新风暴风险:级联更新 / 删除可能导致大规模数据操作阻塞。
- 外键的优势:保证数据一致性和完整性,减少应用层代码量(无需手动维护关联关系)。
- 适用场景:单机低并发、无分库分表需求的简单系统可考虑使用。
存储过程
- 定义:一组包含逻辑控制语句的 SQL 集合,可封装复杂业务逻辑,预编译后重复调用。
- 核心作用:简化复杂 SQL 操作,减少应用层与数据库的交互次数,执行效率高于单独 SQL。
- 缺点(阿里开发手册禁止使用):难以调试和扩展,无移植性(不同数据库语法差异大),消耗数据库资源。
drop、delete 与 truncate 的区别
| 对比维度 | drop | truncate | delete |
|---|---|---|---|
| 核心用法 | 删除表结构及所有数据 | 清空表中数据,保留表结构 | 删除表中满足条件的数据(无 WHERE 则清空) |
| 所属数据库语言 | DDL(数据定义语言) | DDL(数据定义语言) | DML(数据操作语言) |
| 事务支持 | 操作立即生效,不可回滚 | 操作立即生效,不可回滚 | 支持事务,可回滚(提交后生效) |
| 日志生成 | 不生成 binlog 日志 | 不生成 binlog 日志 | 生成 binlog 日志,支持数据恢复 |
| 执行速度 | 最快(释放表所有资源) | 较快(重建表结构,重置自增) | 最慢(逐行删除,触发触发器) |
| 表结构保留 | 不保留(表被删除) | 保留 | 保留 |
数据库设计通常分为哪几步
数据库设计遵循标准化流程,共六步:
- 需求分析:梳理用户的数据、功能和性能需求(如电商系统需存储商品、订单、用户数据);
- 概念结构设计:采用 ER 模型设计,绘制 ER 图,明确实体、属性及关联关系;
- 逻辑结构设计:将 ER 图转换为关系模型(即数据库表),定义表结构、字段类型、主键、外键;
- 物理结构设计:选择存储结构(如索引类型)和存取路径(如数据分区方式),优化存储性能;
- 数据库实施:编写 SQL 脚本创建库表、测试数据插入、验证功能;
- 数据库的运行和维护:日常监控、性能优化、数据备份与恢复、需求迭代时的结构调整。