gpt4 book ai didi

database - 分解为 2NF

转载 作者:搜寻专家 更新时间:2023-10-30 23:08:21 24 4
gpt4 key购买 nike

我目前正在研究归一化。我知道如何为给定的非规范化列表规范化数据。

但是这个让我有点困惑

Q. Decompose R{a,b,c,d,e,f} into 2NF using following functional dependencies. 

a -> b,c,d,e,f
b,c -> a,d,e,f
b -> f
d -> e

对此我的回答是:

R0 = a - > b,c
R1 = b,c - > a,d,e
R2 = b - > f

谁能帮我解决这个问题?

最佳答案

主要有两个问题:

  1. 您的 FD 集中有很多冗余。如果您先计算最小覆盖范围,通常会节省一些时间。

  2. 您拆分关系的方式没有意义,无论规范化级别如何。此关系的候选键是 ABC;但是在您的回答中,所有 键都在 R0 中,没有别的,这是多余的(每个表一个键就足够了)和无用的(想想看,有在这样的表中你无法查询任何内容!);再次将所有 key 放在 R1 中,这也是多余的。

分解这种关系的更好方法是

R1(B, F), R2(D, E), R3(A, B, C, D)

同时满足 2NF 和 3NF。

顺便说一句,你应该看看this Stanford course ,理解归一化真的很有用。维基百科页面也写得很好。

编辑 以回答您关于评论的问题:函数依赖意味着 RHS 上的值由 LHS 上的值确定。在这种情况下,我们有

A -> BC
BC -> A

如果你用更直观的东西替换字母,这相当于:

post_id -> { post_title, post_date }
{ post_title, post_date } -> post_id

也就是说,如果您知道post_id,您就可以计算出post_titlepost_date;同时,如果您知道 post_titlepost_date,您可以追溯 post_id。这就是循环依赖的意义。

也就是说,在每个关系中,所有的 FD 都应该被保留,所以在 R3BC -> DA -> D 都成立,但您不需要 ABC -> D ,它不在您的 FD 集中,显然是多余的。另一方面,A -> D 也是多余的,因为您已经有了 A -> BC、BC -> D。这就是为什么我提到首先计算最小覆盖。

关于database - 分解为 2NF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23300005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com