什么是数据库标准化?

数据库标准化是数据库设计中用于高效整理数据的过程。它有助于减少数据冗余(重复数据)并提高数据完整性(数据准确性和一致性)。这就像整理杂乱的文件柜:您不会在多个地方存放相同的信息,而是将每条信息放在一个位置,然后使用交叉引用系统将它们联系起来。

我们所说的“数据库”是什么?

数据库只是数据的有序集合,通常以电子形式存储在计算机系统中。您可以将其视为一个数字文件柜。您不再使用纸质文件夹和抽屉,而是使用结构化表格(或其他数据整理方法),这样可以快速高效地存储、管理和检索信息。

现代企业使用数据库来跟踪从客户订单、库存水平到用户账号详细信息和财务交易等各种信息,并且许多企业选择在云端运行其数据库。

什么是关系型数据库?

关系型数据库将数据整理成一个或多个包含列和行的表。之所以称为“关系型”,是因为它在这些表之间建立了特定的预定义关系。其核心思想是将复杂信息分解为更小、更易于管理的部分,避免多次存储相同的信息。

数据库标准化示例

假设有一个简单的在线商店数据库。您将有一个客户表(姓名、地址、电话号码)和一个订单表(日期、总金额)。当客户下单时,您无需将客户的完整地址复制到“Orders”(订单)表中,只需使用客户的唯一 ID 将订单与客户的完整详细信息关联起来。

如果客户搬家并更改了地址,您只需在一个地方更新地址:“Customers”(客户)表。如果您将此信息复制到 100 条订单记录中,则必须更新所有 100 条记录,这可能会导致数据混乱且不一致。这种需要在多个地方更新信息的问题称为数据异常

不过,您希望在购买时将商品的价格复制到订单记录中。为什么?因为主“Products”(产品)表中的产品价格将来可能会变化,但订单记录需要反映客户在交易当日实际支付的价格。在这种情况下,复制并冻结数据(或创建快照)是正确的设计选择。

规范化是设计关系表及其之间关系的系统过程,旨在消除这些不一致性并节省存储空间。“范式”(1NF、2NF、3NF 等)是一系列规范性规则。它们可以解决数据冗余及其导致的数据异常问题,并根据您的应用需求,提供一种清晰的路径来高效可靠地组织数据。

不同的范式(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)将这两个表链接起来。这样可确保一旦办公室位置变更,您只需在一个地方完成更新。

标准化与反标准化

功能

规范化

反规范化

主要目标

减少冗余,提高数据完整性。

提升读取性能。

使用场景示例

事务型数据库(频繁更新)。

分析数据库和数据仓库(频繁读取);创建后不得更改的数据(例如合同或账单快照)。

结果

更多表,更少数据重复。

更少的表,有意进行数据重复。

功能

规范化

反规范化

主要目标

减少冗余,提高数据完整性。

提升读取性能。

使用场景示例

事务型数据库(频繁更新)。

分析数据库和数据仓库(频繁读取);创建后不得更改的数据(例如合同或账单快照)。

结果

更多表,更少数据重复。

更少的表,有意进行数据重复。

反标准化是指有意向数据库添加冗余数据,通常用于提升报表或分析类查询性能。这是一种权衡:您牺牲了一些完整性并增加了存储空间,以实现更快的数据检索。不过,在法律合同等场景中,您可能需要这种有意冗余,以便创建独立于未来更改的数据快照。这可确保合同签署时记录的条款、名称和价格长期保持不变且可用,即使随后更新了主要客户或产品数据亦然。

数据库标准化为何重要?

规范化通过使用“范式”来构建数据并避免常见问题,使关系型数据库(如 Cloud SQLSpanner)更高效、更可靠且更易于管理。

减少数据冗余

将客户地址等每条数据仅存储在一个位置,以节省存储空间并提高效率。

消除数据异常

避免因冗余数据而导致不一致,例如插入、删除或更新异常。

提高数据完整性

通过保证每段数据都是正确的,并且只存储在一个位置,确保数据库中的数据准确且一致。

如果您优先考虑使用超高性能、大规模或灵活的架构,则可以改为选择非关系型 (NoSQL) 数据库,例如 BigtableFirestore。NoSQL 数据库的设计原则有所不同,它有意包含数据冗余,为实现快速读取和可用性进行了优化。

利用 Google Cloud 解决业务难题

新客户可获得 $300 赠金,用于抵扣 Google Cloud 的费用。

更进一步

获享 $300 赠金以及 20 多种提供“始终免费”用量的产品,开始在 Google Cloud 上构建项目。