跳过规范化步骤?

Skipping steps in Normalization?

只是好奇:为什么不能进行所有必要的规范化是有原因的 一步到位?归一化最终不就是重绘函数依赖(FD)图吗?我们从一个 FD diagram/graph 开始,我们希望以一个图结束(顶点是属性,如果 b 是 a 上的 FD,则属性 a、b 之间有一条边)表示(编辑)BCNF 中的关系?

编辑:我的意思是:我们从 FD 图开始,它是一个图配对属性 a,b 当且仅当 b 是 A 上的 FD,即,我们将 a 和 b 与边连接当且仅当 b=f(一种)。 从这个图中我们想得到一个具有某些特征的图(FD)_2,相当于已经完全归一化,即(FD)_2在5NF或6NF中,使用图与给定之间的图论关系正常形式。 If So 我们基本上是将一个图映射到另一个图。我们可以使用这种方法——直接绘制 (FD)_2 作为 FD 的函数来跳过归一化步骤吗?

是:归一化可以通过重新排列(超)图来表征。它不必通过以某种顺序通过正常形式来完成。 (这只是一个常见的误解。)

从 1NF 到 6NF 的连续体上的范式是处理有问题的 FD(函数依赖)和 JD(连接依赖)的范式。它们可以被排序,这样如果一个关系值或变量满足一个形式,那么它就满足之前的形式,但不一定满足之后的形式。目前:1NF、2NF、3NF、EKNF、BCNF、4NF、ETNF、RFNF、SKNF、5NF 又名 PJ/NF、Overstrong PJ/NF、6NF。这种排序本身与分解为更高范式的关系值或变量无关。没必要通过一系列形式来分解。

范式只是已发现具有有用属性的不同条件。而且,范式只是那些已经被发现的;很可能还有其他有用的属性需要区分。我们不通过 them 来规范化 now。 ETNF 是 2012 年!

关于你的图形特征:

FD 具有 属性作为决定因素。这决定了另一个set。但是因为一个决定另一个当且仅当一个决定每个集合恰好包含另一个的一个成员,所以我们也非正式但明确地谈论一组属性决定一个属性。 FD {...} -> a 成立当且仅当 a = f(...)。 (可以有零个或多个决定性属性。)BCNF 是有问题的 FD 的最高范式,但有更高的范式有问题的 JD。具有给定组件的 JD 保持关系,当且仅当它始终是它们的连接。即它的meaning/predicate可以表示为组件的AND。所以 FD {...} -> A 成立当且仅当 JD 成立对应于 meaning/predicate 与合取 A = F(...)!一个MVD(multi-valued dependency)对应某个二进制JD。 5NF的意思是每一个持有的JD都是"implied by the keys"(专业术语)。

有从 FD 开始直接分解为 2NF、直接分解为 3NF 和直接分解为 BCNF 的算法(具有各种其他属性,例如保留 FD)。参见 the Alice book。只要分解到没有非平凡的 JD,就可以分解为 6NF,而不考虑 FD。

(参见 C. J. Date 的 Database Design and Relational Theory: Normal Forms and All That Jazz。)