Java技术八股学习Day29

数据库基础知识

数据库相关核心定义

  • 数据库(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。

主键和外键的区别

对比维度 主键(主码) 外键(外码)
核心作用 唯一标识表中元组 建立表间关联关系
唯一性要求 必须唯一 可重复
空值允许 不允许为空 允许为空
数量限制 一个表仅能有一个 一个表可有多个

外键与级联的使用建议

  • 不推荐使用的原因(阿里开发手册强制要求)
    1. 增加复杂性:开发和测试需考虑外键约束,需求变更时修改成本高;
    2. 消耗数据库资源:数据库需额外维护外键关联,增删改时需触发校验;
    3. 不支持分库分表:分布式场景下外键约束失效;
    4. 存在更新风暴风险:级联更新 / 删除可能导致大规模数据操作阻塞。
  • 外键的优势:保证数据一致性和完整性,减少应用层代码量(无需手动维护关联关系)。
  • 适用场景:单机低并发、无分库分表需求的简单系统可考虑使用。

存储过程

  • 定义:一组包含逻辑控制语句的 SQL 集合,可封装复杂业务逻辑,预编译后重复调用。
  • 核心作用:简化复杂 SQL 操作,减少应用层与数据库的交互次数,执行效率高于单独 SQL。
  • 缺点(阿里开发手册禁止使用):难以调试和扩展,无移植性(不同数据库语法差异大),消耗数据库资源。

drop、delete 与 truncate 的区别

对比维度 drop truncate delete
核心用法 删除表结构及所有数据 清空表中数据,保留表结构 删除表中满足条件的数据(无 WHERE 则清空)
所属数据库语言 DDL(数据定义语言) DDL(数据定义语言) DML(数据操作语言)
事务支持 操作立即生效,不可回滚 操作立即生效,不可回滚 支持事务,可回滚(提交后生效)
日志生成 不生成 binlog 日志 不生成 binlog 日志 生成 binlog 日志,支持数据恢复
执行速度 最快(释放表所有资源) 较快(重建表结构,重置自增) 最慢(逐行删除,触发触发器)
表结构保留 不保留(表被删除) 保留 保留

数据库设计通常分为哪几步

数据库设计遵循标准化流程,共六步:

  1. 需求分析:梳理用户的数据、功能和性能需求(如电商系统需存储商品、订单、用户数据);
  2. 概念结构设计:采用 ER 模型设计,绘制 ER 图,明确实体、属性及关联关系;
  3. 逻辑结构设计:将 ER 图转换为关系模型(即数据库表),定义表结构、字段类型、主键、外键;
  4. 物理结构设计:选择存储结构(如索引类型)和存取路径(如数据分区方式),优化存储性能;
  5. 数据库实施:编写 SQL 脚本创建库表、测试数据插入、验证功能;
  6. 数据库的运行和维护:日常监控、性能优化、数据备份与恢复、需求迭代时的结构调整。
相关推荐
闫记康2 小时前
linux配置ssh
linux·运维·服务器·学习·ssh
浅念-2 小时前
C语言——双向链表
c语言·数据结构·c++·笔记·学习·算法·链表
lxl13073 小时前
学习C++(5)运算符重载+赋值运算符重载
学习
AutumnorLiuu3 小时前
C++并发编程学习(一)——线程基础
开发语言·c++·学习
CS创新实验室4 小时前
关于 Moltbot 的学习总结笔记
笔记·学习·clawdbot·molbot
峥嵘life4 小时前
Android EDLA CTS、GTS等各项测试命令汇总
android·学习·elasticsearch
千谦阙听4 小时前
数据结构入门:栈与队列
数据结构·学习·visual studio
.小墨迹4 小时前
C++学习——C++中`memcpy`和**赋值拷贝**的核心区别
java·linux·开发语言·c++·学习·算法·机器学习
望忆4 小时前
关于《Cold & Warm Net: Addressing Cold-Start Usersin Recommender Systems》
学习