Oracle标准化是关系模型的改良或扩展,Oracle标准化也是依照第一个关系模型草案并在此基础上采用一定具体方法进行改进的进程。
一列或一组列—Y,被认为是与另列或一组列(X)函数相关;如果赋予X一组给定的值,那么将决定Y的一组唯一值。说Y和X函数相关,就等于说X决定Y,通常写作X—>Y。当然,最明显的例子就是,一个关系表中的主键能够唯一决定表中某一行的值。然而,其他相关也可能存在,只是它们不是主键的结果。标准化的主要目的就是消除关系模型中不是主键造成的所有函数相关。
以下是Oracle标准化的三个主要原因,在许多数据库分析和设计的书中经常提到它们:
■保持数据完整性。这个原因,也许是最重要的原因,足可以解释为什么要实现标准化。因为数据只被贮存一次,所以它保持正确和一致性。换句话说,不必保存数据的多个备份。否则,相同数据项的各种备份可能不再同步,并且可能最终要求繁重的应用程序控制,因为RDBMS的自动完整性机制不能起到调整作用。许多遗留系统正处于这种状态。
■建立一个尽可能与应用无关的模型。换句话说,标准化只是增强这样一个概念,即关系模型应该是数据驱动的,而不是程序驱动的。对大部分数据库来说,这意味着改变处理需求时数据库设计能保持稳定和原封不动。应用程序的要求应该和数据库逻辑计无关。
■减少存储需求(并且也要不断地为提高查询性能打下基础)。除了外键,全面标准化消除了关系设计中所有冗余的东西。不必要的数据备份同样要求不必要的次级存储需求。另外,存有及可能被搜索的数据越多,需要的总系统时间就越多,因此性能也就越差。
为了更好的理解Oracle标准化,我们还需完善几个概念:
1.第一范式
第一范式(1NF)不包含重复组,这等于说贮存在一个单元里的数据必须是一个单一、简单值,而且不能保留一条以上的信息。为了清晰,信息原则不允许在一个列中有重复组,而1NF额外要求在一行中不能有重复组,不管是重复的列还是列中含有的重复信息都不允许。为了实现更高的标准化级,需要一个非键列。狭义的非键列定义是:一个不是主键的一部分的列;广义的非键列定义是:不是任何候选键的一部分的列。这种情况下,应选择狭义定义。本质上,一个表的列集合可以看作是由一个主键和剩余项组成,剩余项的任意一部分都是非键列。
2.第二范式
第二范式(2NF)没有不完全相关,每个非键列都依赖于全主键,如果主键是复合键,则包括它所有的列。
3.第三范式
第三范式(3NF)没有传递的相关性。没有依赖于其他非键列的非键列,如果一个表所用的非键列都依赖于键、全键,并且只依赖于键,那么这个表就是3NF形式的表。如果消除重复组后,每个非主键列都依赖于键和全键,这是2NF,只依赖于键则是3NF。
4.BoyceCodd范式(BoyceCoddNormalForm,BCNF)
BoyceCodd范式包括不反转的不完全相关(有时不太正规地称之为31/2NF),主键和它的任何部分都不依赖一个非键属性。因为你取的是非键的严格定义,3NF考虑候选键问题,而且你的表总是BCNF形式的。
还有第四范式和更高级范式。在学术上,Oracle标准化理论已超出BCNF许多级了,通常数据库分析和设计的相关书籍已达到5NF的高度。4NF处理多值相关(MVD)问题,而5NF处理连接相关(JD)问题。尽管这些范式的理论稍稍超出了本书的范围,但你应该知道如果每个MVD都是一个FD,那么这个表是4NF形式的表;如果每个JD都是它的关系键的结果,那么这个表是5NF形式的表。
建议:至少要为BCNF而努力,然后必要时会得到物理数据库设计补偿,这将引导你进入下一个主题。如果可能,研究第四范式和第五范式,设法通过你的努力达到这些级别的标准化。你作为一个数据库系统管理员的目标就是尽可能地提高标准化程度,然而使用尽可能少的实体来实现它们。这是一个挑战,因为,通常标准形式越高,产生的实体越多。
【编辑推荐】