# 前言
- 记录一下学习过程中的笔记,方便日后复习 / 查询,部分笔记收录自 AI,如有理解错误的地方欢迎指正
# 参考教材
- 数据库原理与应用 - 基于 MySQL (赵明渊)
# DB、DBS、DBMS
DB(数据库):长期存储在计算机内、有组织的、可共享的大量数据集合。DBMS(数据库管理系统):位于用户与操作系统之间的一层数据管理软件,是用户与数据库之间的接口,Mysql 是数据库管理系统。DBS(数据库系统):在计算机系统中引入数据库后的完整系统构成,是一个整合了所有资源的生态系统。- DBS = DB + DBMS + 应用程序 + 硬件 + 人员
- DB 是 DBMS 的管理对象:数据库是数据的集合,DBMS 是操作这些数据的工具。
- DBMS 是 DBS 的核心组件:数据库管理系统是数据库系统中承上启下的关键软件层。
- DBS 包含 DB 和 DBMS:数据库系统是顶层概念,整合了数据、软件、硬件和人员,形成一个可运行的完整体系。
# 数据库模型(概念模型、逻辑模型、物理模型)
- 数据库模型按照应用层次可分为三类
概念模型-->逻辑模型-->物理模型,三者是从抽象到具体、层层细化的关系
# 概念模型
- 对应 E-R 图(实体 - 关系图)设计阶段
# 逻辑模型
- 对应数据库各个表设计阶段(包括:表结构、字段、约束等)
- 逻辑模型又分为:层次模型、网状模型、关系模型
- 关系模型是应用最广泛、最重要的一种逻辑模型
![]()
# 物理模型
- 对应表设计导入到具体数据库(Mysql/Oracle/SqlServer)后的建表阶段
# E-R 图 (Entity-Relationship)
- 全称为实体 - 关系图(英文:Entity-Relationship Diagram)
- 一对一
(1:1),一对多(1:n),多对多(m:n) 矩形框:表示实体椭圆框:表示属性菱形框:表示实体间的联系
![image]()
![image]()
# 三级模式结构
# 外模式
- 也称为用户模式 / 子模式,对应用户级,一个数据库可以有多个外模式
- 简单理解为数据库视图(View),用于向用户展示数据库中他需要的一部分数据,或者有权限读取的一部分数据
-- 创建一个视图提供给应用查询 | |
CREATE VIEW v_customer_orders AS | |
SELECT id, customerId, code, createDate, price FROM `order`; | |
-- 应用从视图中查询需要的数据 | |
SELECT * FROM v_customer_orders WHERE customerId = 114514 ORDER BY id DESC; |
# 模式
- 也称为概念模式 / 逻辑模式,对应概念级,一个数据库只有一个模式
- 简单理解为数据库中的所有表结构(Table)
CREATE TABLE `order` ( | |
`id` int NOT NULL AUTO_INCREMENT, | |
`storeId` int NOT NULL COMMENT '门店Id', | |
`customerId` int NOT NULL COMMENT '客户Id', | |
`concatId` int NOT NULL COMMENT '客户联系人Id', | |
`createUserId` int NOT NULL COMMENT '开单用户Id', | |
`code` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '订单号', | |
`price` decimal(10, 2) NOT NULL COMMENT '订单原价格/折前价格', | |
`discountPrice` decimal(10, 2) NOT NULL COMMENT '订单折后价格', | |
`createDate` datetime NOT NULL COMMENT '开单日期', | |
`updateDate` datetime NOT NULL COMMENT '最后修改日期', | |
`deliveryDate` datetime NOT NULL COMMENT '交货日期', | |
`concatName` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '联系人名称', | |
`finishCode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '成品编号', | |
`isChecked` bit(1) NOT NULL COMMENT '是否已审核', | |
`isPacked` bit(1) NOT NULL COMMENT '是否已包装', | |
`isInStock` bit(1) NOT NULL COMMENT '是否已入库', | |
`isOutStock` bit(1) NOT NULL COMMENT '是否已出库', | |
`isCancelPrint` bit(1) NOT NULL COMMENT '是否已取消印刷', | |
`isDeleted` bit(1) NOT NULL COMMENT '是否已删除', | |
PRIMARY KEY (`id`) USING BTREE | |
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '订单表' ROW_FORMAT = DYNAMIC; |
# 内模式
- 也称为存储模式,对应物理级,一个数据库只有一个内模式
- 简单理解为 Mysql 数据库的存储引擎(myisam/innodb), 对应数据在硬盘上存储方式
- 具体表现为物理数据文件(如 InnoDB 的.ibd 文件)、日志文件(Redo Log, Undo Log)、B + 树索引结构、数据页、表空间等。
# 二级映像功能
# 外模式 / 模式映像
| 要素 | 说明 |
|---|---|
| 是什么 | 外模式与模式之间的映射规则 |
| 谁维护 | 数据库管理员(DBA) |
| 保证什么 | 逻辑独立性 —— 模式被改变后,保证外模式不受影响 |
| 好处 | 降低应用程序的维护成本,提升系统灵活性 |
- 例:假如 Order 表中字段名
code需要修改为orderCode,修改后应用读取视图v_customer_orders就会报错
Error: 1356 - View 'store.v_customer_orders' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
- 此时为了外部应用程序不需要修改代码也能正常使用,DBA 可以修正视图,将现在的
orderCode重新映射回原本视图中的code
ALTER VIEW v_customer_orders AS | |
SELECT id, customerId, orderCode AS code, createDate, price FROM `order`; |
# 模式 / 内模式映像
- 模式 / 内模式映像本质是定义 “全局逻辑结构(模式)” 与 “物理存储结构(内模式)” 之间对应关系的转换规则,其核心作用是保证数据的
物理独立性。 - 例:假如数据库存储引擎从
myisam修改为innodb,那么 Order 表对应的物理存储文件将从原来三个文件order.sdi,order.MYD,order.MYI变为了单个文件order.ibd锁机制从原来的表级锁变成了行级锁,但是执行同样的 SQL 查询语句依然能查询出同样的结果
# 关系模式
# 概念




# 关系完整性
- 实体完整性: 主属性的列的值不能为 null,不允许重复。等同于主键约束。
- 参照完整性: 外键的值必须是关联表主键中存在的值,或者为 null。等同于外键约束。
- 用户定义完整性: 关系模型自带的通用规则外,用户根据业务需要额外添加的约束。如:非空约束,唯一约束,范围约束等
# 关系代数
- 关系代数是一种抽象的查询语言,用于对关系的运算来表达查询
# 传统的集合运算

# 专门的关系运算





