
数据库技术的演进围绕数据管理效率的提升展开,主要分为三个核心阶段:
数据库的常见概念可围绕数据存储结构、核心组件、关键技术与规则三大维度展开,清晰理解这些概念是掌握数据库应用的基础。
这一层级描述了数据在数据库中如何被有序组织和管理,从最小单元到整体集合,形成清晰的层级关系:
这些组件负责数据库的创建、管理、访问和维护,是数据库系统的 “骨架”,确保系统稳定运行:
这些技术和规则用于确保数据的准确性、完整性、一致性和可访问性,是数据库高效运行的 “保障”。
数据模型是描述数据结构、数据关系和数据约束的框架,决定了数据库的组织方式,主流模型有三种:
模型类型 | 结构特点 | 适用场景 | 代表案例 |
|---|---|---|---|
层次模型 | 树形结构,每个节点只有一个父节点 | 父子关系明确的场景(如组织架构、家谱) | 早期 IBM IMS 数据库 |
网状模型 | 图结构,节点可关联多个父 / 子节点 | 复杂多对多关系场景(如工程设计) | 早期 CODASYL 数据库 |
关系模型 | 以表为核心,通过主键、外键建立表间关系 | 绝大多数业务场景(如电商、金融、社交) | MySQL、Oracle、SQL Server |
数据模型的三要素:
SQL(Structured Query Language,结构化查询语言)是用于与数据库交互的标准语言,实现数据的查询、插入、更新和删除,按功能分为三类核心子语言:
数据库规范化(Normalization)是通过拆分表结构,消除数据冗余和异常(插入异常、更新异常、删除异常)的过程,用 “范式(NF,Normal Form)” 衡量规范化程度,常用范式如下:
核心规则:消除重复字段,表中所有字段的值必须是 “原子的”(不可再分割的最小数据单元)。
反例:“用户表” 中 “联系方式” 字段存储 “138xxxx1234, zhangsan@xxx.com”,包含电话和邮箱两个信息,可分割,不满足 1NF;
正例:拆分为 “手机号” 和 “邮箱” 两个独立字段,每个字段只存储单一类型数据,满足 1NF。
说明:1NF 是关系型数据库的基础,不满足 1NF 的数据库不是关系型数据库。
核心前提:满足 1NF,且表中有主键(或复合主键),确保每个记录可唯一区分;
核心规则:所有非主键字段必须完全依赖于主键(或复合主键的全部字段),不能只依赖复合主键的某一个字段(消除 “部分依赖”)。
反例1:员工工资信息表中,员工编码和岗位组成组合关键字(即复合主键),不满足2NF。
(员工编码+岗位)->(决定)(姓名、年龄、学历、基本工资、绩效工资、奖金)上述关系可以进一步拆分为:
(员工编码)—>(决定)(姓名、年龄、学历)
(岗位)->(决定)(基本工资)正例1:上述可以改为
员工信息表:EMPLOYEE(员工编码、姓名、学历、年龄)
岗位工资表:QUARTERS(岗位、基本工资)
员工工资表:PAY(员工编码、岗位、绩效工资、奖金)反例2:设计 “订单详情表”,用 “订单 ID + 商品 ID” 作为复合主键,同时包含 “订单日期” 字段。“订单日期” 只依赖 “订单 ID”(一个订单对应一个日期),不依赖 “商品 ID”,存在部分依赖,不满足 2NF。
正例2:拆分表结构,将 “订单日期” 移到 “订单表”(主键为 “订单 ID”),“订单详情表” 只保留 “订单 ID + 商品 ID”“商品数量”“商品单价” 等完全依赖复合主键的字段,满足 2NF。
订单表(订单ID、订单日期)--主键:订单ID
订单详情表(订单ID+商品ID、商品数量、商品单价)——复合主键:订单ID+I商品D核心前提:满足 2NF;
核心规则:所有非主键字段不能通过其他非主键字段间接依赖于主键(消除 “传递依赖”)。
反例:设计 “订单表”,主键为 “订单 ID”,包含 “用户 ID”“用户名”“用户地址” 字段。“用户名”“用户地址” 依赖 “用户 ID”,而 “用户 ID” 依赖 “订单 ID”,形成 “订单 ID→用户 ID→用户名” 的传递依赖,不满足 3NF。
订单表(订单ID、用户ID、用户名、用户地址)
订单ID->用户ID->用户名正例:拆分表结构,“订单表” 只保留 “订单 ID”“用户 ID”“订单日期” 等字段;将 “用户名”“用户地址” 移到 “用户表”(主键为 “用户 ID”),通过 “用户 ID” 关联两张表,消除传递依赖,满足 3NF。
订单表(订单ID、用户ID、订单日期)
用户表(用户ID、用户名、用户地址)实际设计中,满足 3NF 已能解决大部分问题,更高阶范式多用于复杂场景。
现实中实体间的关系需映射到数据库表结构,核心关系有三种:
数据库通过 “三级模式” 划分数据抽象层级,通过 “两级映射” 隔离层级变化,确保数据的逻辑独立性和物理独立性,是数据库系统的核心架构设计。
定义:它是数据库中全体数据的逻辑结构和特征的描述,也是所有用户的公共数据视图。 (如 “电商数据库” 中用户表、订单表的结构定义,以及表间关联关系);
特点:一个数据库只有一个模式,处于三级模式的中间层,连接外模式和内模式。
定义:它是数据库用户(包括应用程序员、最终用户)能够看到和使用的局部数据的逻辑结构和特征的描述,也是数据库用户的数据视图。 (如 “订单管理模块” 仅需访问 “订单表” 的 “订单 ID”“用户 ID”“订单金额” 字段,无需访问 “用户地址” 等无关字段);
特点:外模式是模式的子集,一个模式可对应多个外模式,通过外模式限制用户访问范围,保障数据安全。
定义:数据物理结构和存储方式的描述,即数据在数据库内部的存储形式(如数据以 B + 树结构存储、字段的压缩方式、索引的存储位置);
特点:一个数据库只有一个内模式,直接与硬件存储交互,隐藏物理存储细节。
内 --------------------->外
内模式------->模式----->外模式
(一个)----(一个)----(多个)两级映射用于建立不同模式间的关联,隔离层级变化,确保上层应用不受底层结构修改的影响:
定义:一个模式可以有任意多个外模式。外模式 / 模式映射定义了每个外模式与模式之间的对应关系。 (如 “订单管理模块” 的外模式如何关联 “订单表” 的模式);
作用:当模式发生改变(如 “订单表” 增加 “物流单号” 字段),DBA 可修改该映射,使外模式保持不变,上层应用无需修改,保障数据的逻辑独立性。
定义:数据库中只有一个模式和一个内模式,因此模式 / 内模式映射是唯一的,它定义了数据库的全局逻辑结构和存储结构之间的对应关系。(如 “订单表” 的逻辑结构如何对应物理存储结构);
作用:当内模式发生改变(如更换存储设备、修改数据存储引擎),DBA 可修改该映射,使模式保持不变,进而外模式和应用程序不受影响,保障数据的物理独立性。
简单来说,这两种映射的核心作用就是通过隔离不同层级的变化,分别保障数据的逻辑独立性和物理独立性,让数据库结构的修改不会轻易影响到上层的应用程序。