首页 > 解决方案 > 在 MySQL 中实现 3NF 而不损失查询速度?

问题描述

我第一次练习使用 SQL 制作数据库,并且在我真正开始编写任何查询之前先制作 ER 图。我想尝试实现 3NF,但不确定基于我尝试的示例场景是否完全成功。3nf 是否总是用于查询速度的最佳规范化?

标签: mysqldatabase-design

解决方案


规范化与查询速度无关。如果使用完全规范化,即使查询需要进行连接,也可以进行高性能查询。我经常看到在非常高性能的生产系统中的关系表之间使用连接。

规范化是关于消除数据异常,也就是说,使您的数据模型可以防止数据与自身不一致的奇怪情况。

通常,您应该使用精心选择的索引来优化查询,以支持您需要以高性能运行的特定查询。在不知道需要哪些查询才能获得最佳性能的情况下,您无法选择索引。

这足以在 90% 的情况下为您的数据库提供充足的性能。如果这还不够,您可能需要使用非规范化或缓存或分片或其他技术来缓解性能瓶颈。

但是恕我直言,您应该从已规范化的数据库开始。这将使其对数据异常的抵抗力最强,并且还将使其支持最广泛的查询类型。

仅当您遇到性能问题时才使用优化,因为大多数类型的优化会使您的代码更加复杂。


推荐阅读