数据库规范化 2NF 和 3NF
Database normalization 2NF and 3NF
假设关系Appliance(model, year, price, manufacturer, color)
以 {model, year}
作为键和以下 FD:
model -> manufacturer
model, year -> price
manufacturer -> color
找到 2NF 和 3NF。
我的解决方案是这样的:
由于model -> manufacturer
因为部分依赖而违反了2NF,我将Appliance分解如下:
R1(model, manufacturer)
R2(model, year, price)
R3(manufacturer, color)
同样model -> manufacturer
和manufacturer -> color
因为传递依赖违反了3NF所以,我分解Appliance如下:
R1(model, manufacturer)
R2(model, year, price)
R3(model, color)
我的问题是我的标准化有什么问题?
您对 2NF 的归一化是正确的。您可能需要更深入地思考 关系 是否违反 2NF 或 3NF,或者 功能依赖性 是否违反 2NF 或 3NF。你说两个。
在您的 2NF 分解中,R1、R2 和 R3 在 5NF 中。 (因此,根据定义,它们也在 3NF 和 2NF 中。)
对于 3NF,您丢失了 FD manufacturer -> color
。所以这是错误的。
在现实世界中,对 "Appliance" 这样的关系进行归一化可能 会导致不止一个 5NF 分解。
假设关系Appliance(model, year, price, manufacturer, color)
以 {model, year}
作为键和以下 FD:
model -> manufacturer
model, year -> price
manufacturer -> color
找到 2NF 和 3NF。
我的解决方案是这样的:
由于model -> manufacturer
因为部分依赖而违反了2NF,我将Appliance分解如下:
R1(model, manufacturer)
R2(model, year, price)
R3(manufacturer, color)
同样model -> manufacturer
和manufacturer -> color
因为传递依赖违反了3NF所以,我分解Appliance如下:
R1(model, manufacturer)
R2(model, year, price)
R3(model, color)
我的问题是我的标准化有什么问题?
您对 2NF 的归一化是正确的。您可能需要更深入地思考 关系 是否违反 2NF 或 3NF,或者 功能依赖性 是否违反 2NF 或 3NF。你说两个。
在您的 2NF 分解中,R1、R2 和 R3 在 5NF 中。 (因此,根据定义,它们也在 3NF 和 2NF 中。)
对于 3NF,您丢失了 FD manufacturer -> color
。所以这是错误的。
在现实世界中,对 "Appliance" 这样的关系进行归一化可能 会导致不止一个 5NF 分解。