我对Normalization很新,我只想知道我是否正确地将我的表从UNF转换为3NF。我将展示我的所有步骤。
库存报告
PRODUCT ID: DESCRIPTION INVENTORY AISLE# SUPPLIER
10 6 foot garden rake 5 1 Sheffield-Gander inc.
20 7 foot leaf rake 5 1 Sheffield-Gander inc.
30 Round mouth shovel 4 1 Husky Inc.
40 Flat-nosed Shovel 2 1 Husky Inc.
50 Garden pitch-fork 6 1 Husky Inc.
60 8 inch hand shears 9 2 Sheffield-Gander inc.
70 12 inch trimming shears 10 2 Sheffield-Gander inc.
80 10 inch tamper 3 2 Husky Inc.
90 Cedar sapling 34 5 Northwood Farms inc.
100 Golden cedar sapling 23 5 Northwood Farms inc.
110 Mulberry sapling 12 4 Sherwood Nursery
120 Juniper sapling 15 4 Northwood Farms inc.
130 Premium lawn fertilizer 4 6 Sherwood Nursery
140 General grade lawn 12 6 Sherwood Nursery
150 Premium garden fertilize 14 6 Sherwood Nursery
160 General grade garden f 12 6 Sherwood Nursery
170 120 foot watering hose 9 3 Diemar Garden Center
180 12 inch aluminum sprinkl 5 3 Diemar Garden Center
190 Rotating sprinkler jet 4 3 Diemar Garden Center
UNF INVENTORY[ProductID(fk), Description, (Aisle#(fk),Inventory,supplier)]
1NF INVENTORY[ProductID(fk), Aisle#(fk), Description,Inventory, Supplier]
2NF INVENTORY_AISLE [ProductID(fk), Aisle#(fk)]
INVENTORY [ProductID(fk), Description, inventory]
AISLE [Aisle#(fk), supplier]
3NF: INVENTORY_AISLE [ProductID(fk), Aisle#(fk)]
INVENTORY [ProductID(fk), Description(fk)]
AISLE [Aisle#(fk), supplier]
DESCRIPTION [Description(fk), Inventory]
答案 0 :(得分:1)
你在那里有一个很好的第一次尝试。
在UNF表中,如果产品ID 10位于过道1和3中,则当前表结构将在Aisle列中创建重复值,如下所示:
redirect_template
如果出现这种情况:
通过构造如下数据来删除重复值:
PRODUCT ID: DESCRIPTION INVENTORY AISLE# SUPPLIER
10 6 foot garden rake 5 1,3 Sheffield-Gander inc.
非关键字段将依赖主键。为此,让我们确定主键是什么。
对于产品:产品ID。其他字段不是键,依赖于ID 供应商:供应商ID
让我们看看我们如何确保非键直接依赖于主键。产品的描述通常保持一致。产品有库存(可能会迅速变化)。
<强>产品强>
PRODUCT ID: DESCRIPTION INVENTORY AISLE# SUPPLIER
10 6 foot garden rake 3 1 Sheffield-Gander inc.
10 6 foot garden rake 2 3 Sheffield-Gander inc.
<强>供应商强>
ProductID
Description
Inventory (stay with me on this one)
AisleID
重要的是要注意评论者对您的问题的评论。理解功能依赖性很重要。这意味着,如何与之相关。我假设您的产品由一个或多个供应商提供。产品可以放在一个或多个过道中。
非密钥不应该依赖于另一个非密钥
上述设计可能看起来不错,但事实并非如此。产品可以是不同的过道。过道可能有AisleWidth和AisleLength等属性。可能会觉得这两个字段可以在Product表中的AisleID列之后添加。这样做会违反3NF,因为这两个字段与ProductID无关。
<强>产品强>
SuppierID
Name
<强>过道强>
ProductID
Description
<强> ProductPlacement 强>
AisleID
AisleWidth
AisleLength (you don't have some of these fields; they are just for illustration)
<强>供应商强>
ProductID
AisleID
Inventory
<强> ProductSupplier 强>
SuppierID
Name
现在,当库存发生变化时,数据会在一个表中发生变化。库存不仅仅是产品放置;库存可以在仓库中,可以在不同的物理位置等。我们不会涉及到这一点,但您明白ProductPlacement表中的库存仅供说明。
希望能让您在必要时分发表格。这不是规范化的唯一方法。邀请更多答案,希望你能了解除此之外的其他哲学。