功能依赖是DBMS - 关键

时间:2013-04-07 08:05:37

标签: database relational-database functional-dependencies

我正在阅读Ramakrishnan的图书数据库管理系统,在与图式细化和普通表格相关的章节中,我看到一句话:

K is a candidate key for R means that K ----> R , where R is the relation.

我们也有分解规则:

If X ---->YZ, then X----->Y and X----->Z

然后,我的问题是,例如让R = XABCDE和X为关键。然后,由于X ---> XABCDE,重复使用第二规则,我们可以说X - > A,X ---> B,依此类推。那意味着X确定所有属性。但我在这里感到困惑:那么我们不能在表中有一行,这样对于相同的X值,有一个不同的A值。例如,让X为人物属性的身份证号码,A为该人拥有的汽车的型号。然后一个人不能拥有两辆车,但我们没有这样的限制,它必须能够拥有两辆或更多车。

我在这里做错了什么?有人可以帮忙吗?

由于

2 个答案:

答案 0 :(得分:2)

  

例如,设X是人物属性的id号,A是人拥有的汽车的型号。然后一个人不能拥有两辆车,但我们没有这样的限制,它必须能够拥有两辆或更多车。

     

我在这里做错了什么?有人可以帮忙吗?

开始规范化R之前,出错了。

数据库设计人员的部分工作是决定数据库应存储的内容。这与规范化无关。在教科书问题中,这部分是在问题提交给你之前完成的。

如果你从R {XABCDE}开始,其中“X”是一个人的身份证号码,而“A”是一种汽车,R的样本数据可能如下所示。

person_id   car_model      B  C  D  E
--
1           Buick Wildcat  ...
2           Toyota Corolla ...
3           Honda Accord   ...

或者它可能看起来像这样。

person_id   car_model                     B  C  D  E
--
1           Buick Wildcat, Nissan Sentra  ...
2           Toyota Corolla                ...
3           Honda Accord                  ...

或者它可能看起来像这样。

person_id   car_model      B  C  D  E
--
1           Buick Wildcat  ...
1           Nissan Sentra  ...
2           Toyota Corolla ...
3           Honda Accord   ...

第一个例子表明你想每人只存一辆车。这是一个可辩护的设计决策(除非数据库需要知道每个人有多少辆汽车)。大学很少关心你有多少辆汽车;他们只是想知道哪一个应该有停车贴纸。

决定存储什么与规范化无关。

其他示例表明,您希望每人存储多辆汽车,在这种情况下,您至少需要进行一些规范化(在第二个示例中)或至少重新考虑您选择的主键(在第三个例子中)。

一旦确定了要存储的内容,就可以开始规范化了。真的,在决定要存储什么之前,你怎么能开始规范化?那是不可能的。

答案 1 :(得分:0)

在关系R(XABCDE)中,如果X是一个关键词,那么对于X的任何值,该关系在任何时间点只允许A,B,C,D和E的一个值。如果该约束与您打算建模的现实不匹配,则可能X是错误的键选择。