【问题标题】:Normalization and 3NF归一化和 3NF
【发布时间】:2016-08-18 17:07:54
【问题描述】:

假设我有这张表,其中 Pizza Code 是主键

这张表在 3NF 中吗?如果我更改披萨名称,那么价格肯定会受到影响。但同时,我可以看到这个依赖是孤立的,所以我的问题是:

  1. 以当前的数据结构,其中的依赖关系 名称/价格被隔离在一个单独的表中,我们可以说这个 表在 3NF 中?
  2. 如果 2 个非键表列是更大的一部分,例如“订单” 表,那么 Orders 表不会在 3NF 中,对吧?

【问题讨论】:

  • 正确。仅将披萨代码存储在订单表中。
  • 您可能正在寻找一个缓慢变化的维度,因此对于给定代码,名称和价格会随着时间而变化。

标签: sql database database-normalization


【解决方案1】:

你应该问问自己,你的表中 PizzaCode 的含义是什么:

  1. 这只是名称的一种缩写方式(从当前值看来)?换句话说,更改比萨的名称(和价格)的操作是否可以被认为是插入一种新的比萨代替旧的比萨?

  2. 用于唯一标识某个对象(相同对象),该对象有时会更改名称和/或价格?

在第一种情况下,只需去掉它,并使用 PizzaName 作为主键(并作为 Order 表中的外键)。更改披萨名称及其价格的操作将相当于添加新披萨并删除旧披萨(或者如果您想保留,您可以简单地将旧披萨标记为可用/不可用的属性跟踪所有售出的比萨饼)。

在第二种情况下,使用 PizzaCode 作为表 Order 中的主键和外键。

【讨论】:

    猜你喜欢
    • 2016-03-19
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 2013-03-21
    • 2013-11-22
    • 2011-08-26
    • 2016-09-27
    相关资源
    最近更新 更多