# 前言

  • 记录一下学习过程中的笔记,方便日后复习 / 查询,部分笔记收录自 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。等同于外键约束。
  • 用户定义完整性: 关系模型自带的通用规则外,用户根据业务需要额外添加的约束。如:非空约束,唯一约束,范围约束等

# 关系代数

  • 关系代数是一种抽象的查询语言,用于对关系的运算来表达查询

# 传统的集合运算

# 专门的关系运算


总访问量:加载中...更新于