我知道什么是无损分解和有损分解。在有损分解中,我们得到了一些错误的信息。但补救措施是什么?我想如果我们加入主键它会不会有损?
我是对的吗?如果我愿意它也会无损吗?
答案 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_date
和post_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行。