我正在阅读罗摩克里希南的《数据库管理系统》一书,在有关模式优化和正常形式的章节中,我看到一句话:
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是person属性的id号,a是person拥有的汽车的型号。那么一个人不能有两辆车,但是我们没有这样的约束,它必须能够有两辆或更多的车。
我在这里做错什么了?有人能帮忙吗?
谢谢
最佳答案
例如,x是person属性的id号,a是person拥有的汽车的型号。那么一个人不能有两辆车,但是我们没有这样的约束,它必须能够有两辆或更多的车。
我在这里做错什么了?有人能帮忙吗?
在你开始正常化r之前你就错了。
数据库设计器的一部分工作是决定数据库应该存储什么。这与正常化无关。在教科书问题中,这一部分是在问题呈现给你之前完成的。
如果从r{xabcde}开始,其中“x”是一个人的id号,“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 ...
第一个例子表明,您希望每人只存储一辆车。这是一个合理的设计决策(除非数据库需要知道每个人有多少辆车)。大学很少关心你有多少辆车,他们只是想知道哪辆车应该有停车标签。
决定存储什么与规范化无关。
其他示例表明,您希望每人存储一辆以上的汽车,在这种情况下,您至少需要进行一些规范化(在第二个示例中)或至少重新考虑您对主键的选择(在第三个示例中)。
一旦你决定存储什么,你就可以开始正常化了。真的,在决定存储什么之前,如何开始规范化?那是不可能的。
关于database - 功能依赖性是DBMS-关键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15860223/