代码之家  ›  专栏  ›  技术社区  ›  hashmap

数据库规范化2NF和3NF

  •  1
  • hashmap  · 技术社区  · 6 年前

    假设关系 Appliance(model, year, price, manufacturer, color) 具有 {model, year} 作为键和以下FDs:

    model -> manufacturer
    model, year -> price
    manufacturer -> color
    

    查找2NF和3NF。

    我的解决方案是: 自从 model -> manufacturer 由于部分依赖关系,违反了2NF,我将设备分解如下:

    R1(model, manufacturer)
    R2(model, year, price)
    R3(manufacturer, color)
    

    类似地 型号->制造商 manufacturer -> color 由于可传递依赖关系,违反了3NF,因此,我将设备分解如下:

    R1(model, manufacturer)
    R2(model, year, price)
    R3(model, color)
    

    我的问题是我的正常化有什么问题?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mike Sherrill 'Cat Recall'    6 年前

    2NF的规范化是正确的。您可能需要更仔细地考虑 关系 违反2NF或3NF,或者 功能依赖关系 违反2NF或3NF。你两个都说。

    在2NF分解中,R1、R2和R3位于5NF中。(因此,根据定义,它们也在3NF和2NF中。)

    对于3NF,您失去了FD manufacturer -> color .所以这是错误的。

    在现实世界中,规范像“Appliance”这样的关系 可以 导致多个5NF分解。