【问题标题】:Find minimal key for relation scheme找到关系方案的最小键
【发布时间】:2012-04-04 12:19:19
【问题描述】:

我有一个投资公司的数据库:

  • B(经纪人)
  • O(经纪人办公室)
  • 我(投资者)
  • S(库存)
  • Q(投资者拥有的股票数量)
  • D(股票支付的股息)

函数依赖

  • S ⟶ D
  • 我⟶ B
  • 是⟶问
  • B ⟶ O

我需要找到关系方案 R=BOSQID 的最小密钥并需要证明它。

我不知道如何解决这个问题。 能给我个意见吗?

【问题讨论】:

  • 这是一个奇怪的问题。显示的关系模式不是任何更高的范式(它是 1NF,但不是 2NF,更不用说 3NF、BCNF、4NF、5NF 等)。通常,您应该将架构简化为多个表架构,每个表架构都将标识键和外键。在这种情况下,结果将对应于函数依赖关系。要在没有规范化的情况下为给定模式创建最小键,您必须找到一个在功能上确定模式中所有列的键,记住琐碎的 FD 和阿姆斯壮公理(推理规则)。
  • BOISQD 是数据库中的表还是单个表中的列?
  • @xQbert:作为一个有意义的问题,它们必须是列,不是吗?
  • 为了清楚起见,您需要找到一些最小的列集 {X, Y, ...} 使得 XY... ⟶ BOSQID。例如,BOSQID ⟶ BOSQID,但 LHS 不是最小的。
  • @Jonathan Leffler:谢谢。没有给定的表和列。我不懂你说什么。你能再解释一下吗?

标签: sql database schema database-schema schema-design


【解决方案1】:

Jay,我的理解方式如下。您需要找到允许您识别所有字段BOSQID 的最小字段集。我现在不记得有一种算法可以正确地进行您正在寻找的分析,但这个练习似乎很简单,不需要它。

  • 接受B -> O。由于B 确定O,我们可以保留B 并从键中删除O。当前可能的关键字段:BSQID
  • 接受I -> B。由于I 确定B,我们可以保留I 并从键中删除B。请注意,通过传递性,I 确定 O。当前可能的关键字段SQID
  • 接受S -> D。由于S 确定D,我们可以保留S 并从键中删除D。当前可能的关键字段SQI
  • 接受IS -> Q。由于IS 确定Q,我们可以保留IS 并从键中删除Q。当前可能的关键字段:IS

由于我们不再有函数依赖,我们不能继续,所以结果是IS。还有一些更复杂的例子需要处理,但这种简单的技术对你没有帮助,因为它会让你发疯,这就是为什么我建议你也寻找解决这个问题的算法。

【讨论】:

  • 感谢您的回答。我有另一个问题。关系方案 R 有多少个最小键?答案是 BOSQID、BSQID、SQID、SQI 和 IS?
  • 不,最小的只是IS。其他任何一个也决定了所有其他字段,但 IS 是最小的(就其拥有的字段数量而言)
  • 我还有一个问题。假设我将关系 R 分解为两个关系 R1 = ISQD 和 R2 = IBO。这是BCNF分解吗?是 3NF 分解吗?
猜你喜欢
  • 2011-12-17
  • 1970-01-01
  • 2022-01-15
  • 2020-09-18
  • 2018-04-06
  • 2016-04-25
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多