有损连接分解的补救措施是什么?

时间:2014-05-10 11:19:07

标签: database database-normalization

我知道什么是无损分解和有损分解。在有损分解中,我们得到了一些错误的信息。但补救措施是什么?我想如果我们加入主键它会不会有损?

我是对的吗?如果我愿意它也会无损吗?

1 个答案:

答案 0 :(得分:1)

要回答您的问题:要实现无损分解,您必须拆分功能依赖。 看来你已经知道了(正式的)theory behind it,所以我会试着让你一瞥为什么会这样。

假设你有一个关系R

R(author_id, author_name, post_id, post_date, post_title)

与FD

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

现在,好的分解将是

(author_id, author_name, post_id) (post_id, post_date, post_title)

因为post_id确定post_datepost_title,因此成为关键。由于post_id是r2中的键,因此r2中的每一行都是不同的行,我们可以安全地加入。请注意,原始关系中的主键(author_id, post_id),这超出了我们的实际需要。

另一方面,错误的分解将是

(author_id, author_name, post_id, post_date) (post_date, post_title)

因为没有FD post_date -> post_title,因此post_date不是r2中的键,因此post_date可能具有重复值。从直观的角度来看,显而易见的是,连接潜在的重复值将为我们带来大量的phanotom行。