【问题标题】:Normalizing a database where B depends on A, C depends on A, but D depends on B+C规范化一个数据库,其中 B 依赖于 A,C 依赖于 A,但 D 依赖于 B+C
【发布时间】:2015-08-08 08:41:25
【问题描述】:

假设我正在保存我销售的产品的运输记录。

Product | Type | Year Made | Item Cost | Shipping Cost | Total Cost | Sold to | Sale Date |
--------+------+-----------+-----------+---------------+------------+---------+------------
Ford 30 | Car  | 1962      | 1000      | 500           | 1500       | Bob     | 01/22/123 |
BOXXXXX | Box  | 1223      | 5         | 10            | 15         | Sam     | 03/44/321 |

如何标准化最后 3 列?另外,我在实现 3NF 方面是否遗漏了什么?

【问题讨论】:

  • 这取决于表的谓词,仅从列名和单行数据很难猜到。那么,显示的行出现在您的表格中是什么意思?
  • @JohnBollinger 更好吗?
  • 好一点,是的。
  • 所以问题主要与Total CostItem CostShipping Cost 的函数有关,是吗?
  • @JohnBollinger 是的,我也想知道销售对象和销售日期是否符合 3NF...

标签: database normalization database-normalization


【解决方案1】:

假设Item CostTotal Cost 没有约束(特别是它们可以在不同的行中单独或成对地复制),那么这对不会形成表的超键。因此,如果该表包含在功能上仅依赖于该对的任何其他列,则该表不能是第三范式。

如果 Total Cost 预计始终等于 Item Cost + Shipping Cost,则构成对 Item CostShipping Cost 的函数依赖,这意味着该表不在 3NF 中。您可以通过删除 Total Cost 列将您的表格转换为 3NF。您的线索可能是删除该列不会丢失任何数据。

如果您假设一个计算系统无法执行算术运算(或无法直接计算的关系),那么您可以将其移动到具有列的单独表(Item Cost、@987654331)而不是完全删除 Total Cost @,Total Cost)。不过,对于这种特殊情况,这似乎很愚蠢。

我没有看到 Sold toSale Date 列的任何规范化问题。据我所知,每个都完全依赖于 Product 列,我将其视为表中唯一候选键的唯一成员。

【讨论】:

  • 谢谢!这对我帮助很大
  • 介意我再问一个简单的问题吗?
  • @QuyNguyen2013,如果您的其他问题与您已经提出的问题密切相关,请继续。否则,将其作为一个新的顶级问题可能会更好。
猜你喜欢
  • 2023-03-26
  • 2019-08-13
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 1970-01-01
  • 2021-10-17
相关资源
最近更新 更多