数据库标准化是数据库设计中用于高效整理数据的过程。它有助于减少数据冗余(重复数据)并提高数据完整性(数据准确性和一致性)。这就像整理杂乱的文件柜:您不会在多个地方存放相同的信息,而是将每条信息放在一个位置,然后使用交叉引用系统将它们联系起来。
数据库只是数据的有序集合,通常以电子形式存储在计算机系统中。您可以将其视为一个数字文件柜。您不再使用纸质文件夹和抽屉,而是使用结构化表格(或其他数据整理方法),这样可以快速高效地存储、管理和检索信息。
现代企业使用数据库来跟踪从客户订单、库存水平到用户账号详细信息和财务交易等各种信息,并且许多企业选择在云端运行其数据库。
关系型数据库将数据整理成一个或多个包含列和行的表。之所以称为“关系型”,是因为它在这些表之间建立了特定的预定义关系。其核心思想是将复杂信息分解为更小、更易于管理的部分,避免多次存储相同的信息。
假设有一个简单的在线商店数据库。您将有一个客户表(姓名、地址、电话号码)和一个订单表(日期、总金额)。当客户下单时,您无需将客户的完整地址复制到“Orders”(订单)表中,只需使用客户的唯一 ID 将订单与客户的完整详细信息关联起来。
如果客户搬家并更改了地址,您只需在一个地方更新地址:“Customers”(客户)表。如果您将此信息复制到 100 条订单记录中,则必须更新所有 100 条记录,这可能会导致数据混乱且不一致。这种需要在多个地方更新信息的问题称为数据异常。
不过,您希望在购买时将商品的价格复制到订单记录中。为什么?因为主“Products”(产品)表中的产品价格将来可能会变化,但订单记录需要反映客户在交易当日实际支付的价格。在这种情况下,复制并冻结数据(或创建快照)是正确的设计选择。
规范化是设计关系表及其之间关系的系统过程,旨在消除这些不一致性并节省存储空间。“范式”(1NF、2NF、3NF 等)是一系列规范性规则。它们可以解决数据冗余及其导致的数据异常问题,并根据您的应用需求,提供一种清晰的路径来高效可靠地组织数据。
规范化是构建表的分步指南,每个步骤(或“范式”)都基于上一个步骤。要符合第三范式 (3NF),表必须通过第一范式 (1NF) 和第二范式 (2NF) 的测试。大多数操作型数据库都设计为至少满足 3NF 标准,因为这样可以平衡数据完整性和性能。
1NF 规则旨在确保您的数据表从一开始就结构合理,就像设置一张条理清晰的电子表格一样。
规则:每列都必须有唯一的名称,并且每个单元格都必须只包含一个不可分割的值。
解决的问题:避免将一个项目列表放入单个单元格中。例如,在“Orders”(订单)表中,您不能在“Products Ordered”(订购的产品)列下的一个单元格中列出“Milk, Eggs, Bread”(牛奶、鸡蛋、面包)。为此,每件商品都必须单独占一行,以确保数据便于搜索和管理。
只有当表使用复合键(由两个或多个列组合而成的主键,例如订单 ID 和商品 ID)时,才适用 2NF 规则。主键是列或列组,其值唯一标识表中的每一行。非键列是指不属于主键的任何列。
规则:表必须已处于 1NF 状态,并且所有非键列都必须依赖于整个复合键,而不仅仅是其中的一部分。
解决的问题:应仅将数据存放在其完全所属的位置。如果您的表的主键是 (OrderID, ProductID),则不应包含“Product Price”(商品价格)这样的列,因为价格只取决于 ProductID,而不取决于 OrderID。解决方案是将 ProductID 和“Product Price”(商品价格)移至单独的“Products”(产品)表,其中 ProductID 为单一主键。这样可以避免在包含该商品的每个订单中不必要地重复商品价格。
3NF 规则是数据库设计中最常见的目标,旨在消除数据点之间的间接关系。
规则:表必须符合 2NF,非键列必须只依赖于主键,而不能依赖于任何其他非键列。
解决的问题:避免一个非键数据决定另一个非键数据的值。假设有一个“Employees”(员工)表,其中存储了“Office ID”(办公室 ID,非键列)和“Office Location”(办公室地点,另一个非键列)。“Office Location”(办公室地点)由“Office ID”(办公室 ID)决定,而不是由员工 ID(表的主键)决定。这种间接关联是传递依赖项。为了解决这个问题,您创建了一个新的“Offices”(办公室)表,其中只包含“Office ID”(办公室 ID)和“Office Location”(办公室地点),然后使用“Office ID”(办公室 ID)将这两个表链接起来。这样可确保一旦办公室位置变更,您只需在一个地方完成更新。
功能 | 规范化 | 反规范化 |
主要目标 | 减少冗余,提高数据完整性。 | 提升读取性能。 |
使用场景示例 | 事务型数据库(频繁更新)。 | 分析数据库和数据仓库(频繁读取);创建后不得更改的数据(例如合同或账单快照)。 |
结果 | 更多表,更少数据重复。 | 更少的表,有意进行数据重复。 |
功能
规范化
反规范化
主要目标
减少冗余,提高数据完整性。
提升读取性能。
使用场景示例
事务型数据库(频繁更新)。
分析数据库和数据仓库(频繁读取);创建后不得更改的数据(例如合同或账单快照)。
结果
更多表,更少数据重复。
更少的表,有意进行数据重复。
反标准化是指有意向数据库添加冗余数据,通常用于提升报表或分析类查询性能。这是一种权衡:您牺牲了一些完整性并增加了存储空间,以实现更快的数据检索。不过,在法律合同等场景中,您可能需要这种有意冗余,以便创建独立于未来更改的数据快照。这可确保合同签署时记录的条款、名称和价格长期保持不变且可用,即使随后更新了主要客户或产品数据亦然。
Google Cloud 提供一系列支持数据库规范化并能从中受益的服务。



