1

我正在阅读 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 为人员属性的 id 号,A 为该人员所拥有汽车的型号。那么一个人不能有两辆车,但我们没有这样的限制,它必须能够拥有两辆或更多辆汽车。

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

谢谢

4

2 回答 2

2

例如,设 X 为人员属性的 id 号,A 为该人员所拥有汽车的型号。那么一个人不能有两辆车,但我们没有这样的限制,它必须能够拥有两辆或更多辆汽车。

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

你在开始规范化 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   ...

第一个示例表明您希望每人只存放一辆汽车。这是一个合理的设计决策(除非数据库需要知道每个人拥有多少辆汽车)。大学很少关心你有多少辆车。他们只想知道哪一个应该有停车贴纸。

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

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

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

于 2013-04-12T11:07:15.377 回答
0

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

于 2013-04-12T09:11:37.343 回答