我应该将我的数据库正常化吗?

现实世界中的正常化

滚动数据库

Stevecoleimages / Getty Images

数据库归一化是应用程序开发的神圣奶牛之一。每个您拍摄的本科编程课程或预订您的课程可能会讲述的重要性规范化数据库

是时候挑战这种真实性。有时可以根据数据库规范化数据库!

你什么时候应该规范化?

数据库归一化保护您的数据的完整性。在许多情况下,这是一个好主意,而且你应该开始任何数据库设计何地致以正常化。如果您可以确定数据库,请访问它!

底线是你应该除非您有一个非常好的理由,否则将数据库正常化。正常化通常是健全的设计实践。它会降低冗余信息,优化性能并减少您可以在数据库的不同角落中陷入困境的数据完整性问题的可能性。

一些好理由不正常化

也就是说,有一些很好的理由不正常化您的数据库。让我们看看一些:

  1. 加入很贵。归一化数据库通常涉及创建大量表。事实上,您可以轻松结束您认为应该是跨越五个或10个表的简单查询。如果您曾尝试过进行五桌联接,您就知道它原则上工作,但实际上令人痛苦的缓慢。如果您正在构建依赖于对大型表的多加入查询的Web应用程序,您可能会发现自己思考,“如果只有此数据库没有标准化!”当你听到你脑子里的想法时,这是考虑非规范化的好时机。如果您可以将该查询中的所有数据粘在单个表中,而不会真正危及数据完整性,请访问它!是反叛者并使您的数据库的反对。你不会回头!
  2. 归一化设计很困难。如果您正在使用复杂的数据库架构,你可能会发现自己在标准化的复杂性上将头部撞击桌子。作为一个简单的经验法则,如果您整天都在花费弄清楚如何转移到第四正常形式,您可能会归一化太远。退后一步,问自己,如果它真的值得继续。
  3. 快速肮脏应该快速又脏。如果您只是开发原型,请尽快使用任何操作。真的。没关系。快速应用开发有时比优雅的设计更重要。只要记住,一旦准备好超越原型阶段,就会回去仔细查看您的设计。您为快速和肮脏的数据库设计支付的价格是您可能需要将其丢弃并在建立生产时重新开始。
  4. 如果您正在使用NoSQL数据库,传统的归一化是不可取的。相反,使用远远宽容的基本模型来设计您的数据库。当您存储电子邮件,图像或视频等非结构化数据时,这非常有用。

一些话说一句话

数据库标准化通常是一个好主意。当似乎合理的时候,你应该尝试遵循规范化的原则。但是,如果所有指标指向归一化太复杂,无法实施,考虑一种将在保护数据时完成工作的方法。

最后 - 如果您选择从规则中偏离规则,请额外警惕您如何强制执行数据库完整性。如果存储冗余信息,请将触发器和其他控件放在适当位置以确保信息保持一致。

此页面是否有帮助?