总而言之,仅仅通过查看抽象的例子,我在理解功能依赖性方面遇到了很大的困难,并且非常感谢对可能的现实生活情况的理解。 我想看看这些功能依赖是否是任何BCNF违规。 我已经阅读了很多解释但是我仍然在充分理解并且仅仅通过查看下面的字符我无法理解全貌。我觉得我需要一些真实的数据来思考,为此我的例子如下。
R(A,B,C,D,E) where functional dependencies are AB -> C, DE -> C, and B -> D.
我在这里尝试不同的例子和场景,并得到了这个。不确定我是否认为完全错了。但是我走了。
Employee(employee_id, firstname, lastname, title, department)
AB -> C, employee_id, firstname -> lastname (lastname can be determined by employee_id and firstname). lefthand side is a key so no bcnf violation?
DE -> C, title, department -> lastname (lastname of specific employee can NOT be determined by title and department. a bcnf violation, because lefthand side contain no key attribute?
B -> D, firstname -> title (title of employee can not be determined by only firstname, because it can exist several employees with same firstname? and lefthand side has no key attribute, => bcnf violation?
我现在的问题是,对于上述关系,这些FD必须在我测试的每个例子上都是相同的结果吗?或者它取决于每个关系以及它们具有哪些属性,以及它们的顺序?
如果我尝试使用相同的FD和关系的另一个例子。
Movie(movieName, published, starName, age, address)
movieName, published -> starName (starnName can be determined from movieName and published. no bcnf violation?
age, address -> starName (starName cannot be determined from age and address. bcnf violation?
published -> age (age of the movie can be determined from published. No bcnf violation?
我真的很感激一些指导。
感谢。
答案 0 :(得分:1)
你不理解"功能依赖"的定义。或" BCNF"。您需要记住定义,包括定义使用的术语的定义。
功能依赖不是关于"确定"在某种日常意义上,彼此之间的一件事。
在给定表中,当决定性属性集的每个子行值始终显示为确定的属性集的相同子行值时,FD保持不变。当非平凡 FD的每个决定因素是超级密钥时,表在BCNF中。 (了解这些术语的定义。)
在实践中,我们确定哪些列在功能上由给定表的其他列确定,然后进行数学运算,然后使用出来的结果。从复杂的例子中学到的东西并不多。您在问题中提供的每个示例表都具有一定的含义,并且在出现的情况下,没有那组FD 。使用常识,在Employee中,employee_id确定所有属性,并且可能没有其他FD持有除了那些必须持有的FD之外的其他FD。使用常识,在电影中,许多电影可以具有相同的名称,并且唯一的FD是{已发布} - > {age}以及跟随它的那些。
任何时候你做都有一个关系" R(A,B,C,D,E),其中功能依赖是AB - > C,DE - > C和B - > d" 和他们暗示的那些(大概是R,A,B,C,D& E是实际名称的占位符)然后是候选键和超级键,是否是在BCNF中,你如何分解它将永远是相同的(就A,B,C,D和E而言)。