规范化与非规范化
关系数据库由关系(相关表)组成。表格由列组成。如果表是两个大的(即一个表中的列太多),则可能会出现数据库异常。如果表是两个小表(即数据库由许多较小的表组成),则查询效率低下。规范化和反规范化是用于优化数据库性能的两个过程。标准化将数据表中的冗余最小化。反规范化(与规范化相反)添加冗余数据或组数据。
什么是正常化?
规范化是一个过程,用于最小化关系数据库中数据中存在的冗余。这个过程主要是将大表分成冗余较少的小表(称为“正常形式”)。这些较小的表将通过定义良好的关系相互关联。在标准化良好的数据库中,对数据的任何更改或修改都只需要修改一个表。第一范式(1NF)、第二范式(2NF)和第三范式(3NF)是由edgarf.Codd引入的。Boyce-Codd范式(BCNF)是由Codd和raymondf.Boyce于1974年提出的。高级范式(4NF、5NF和6NF)已经被定义,但它们很少被使用。
符合1NF的表确保它实际上表示一个关系(即它不包含任何重复的记录),也不包含任何具有关系值的属性(即所有属性都应该具有原子值)。对于符合2NF的表,它应该符合1NF,并且任何不属于任何候选键的属性(即非质数属性)都应该完全依赖于表中的任何候选键。根据Codd的定义,一个表被称为3NF,当且仅当该表是第二范式(2NF),并且表中不属于候选键的每个属性都应该直接依赖于该表的每个候选键。BCNF(也称为3.5NF)捕获了一些3NF没有处理的异常。
什么是非规范化?
反规范化是规范化过程的反向过程。反规范化通过添加冗余数据或分组数据来优化性能。尽管添加冗余数据听起来会适得其反,但有时反规范化是一个非常重要的过程,可以克服关系数据库软件中的某些缺点,这些缺点可能会导致规范化数据库的严重性能损失(甚至针对更高的性能进行了调整)。这是因为根据数据库系统的实际物理实现,连接多个关系(这些关系是规范化的结果)来生成查询结果有时会很慢。
规范化和非规范化有什么区别?–规范化和反规范化是两个完全相反的过程。—规范化是将较大的表拆分为较小的表以减少冗余数据的过程,反规范化是添加冗余数据以优化性能的过程。—进行规范化是为了防止数据库异常。——反规范化通常是为了提高数据库的读取性能,但由于用于反规范化的附加约束,写入(即**,更新和删除操作)可能会变慢。因此,非规范化的数据库可能比规范化的数据库提供更差的写入性能。——通常建议您“规范化直到它受伤,反规范化直到它工作为止”。 |