数据库在2NF中标准化

时间:2014-11-13 21:50:50

标签: mysql

我正在2NF正常化,我很困惑,这是我到目前为止0 NF颜色是产品的多值属性

    Product = Product_ID (PK)
     Colour{Colour ID, Colour_Name}

然后在1NF颜色获得自己的表,所以它的

Colour=
+Colour_ID (PK)
+Product_ID (FK)
+Colour_Name
<2>在2NF中,然后改为2个单独的表

Colour =
+Colour_ID (PK)
+Product_ID(FK)

和一张新表

Product_Colour =
+Colour_ID
+Colour_Name

我已经完成了ERD并完成了mySQL,但它们(Colour_ID)分别是两个主键还是一个外键,但如果一个是外键,我需要一个主键吗?表

谢谢,

2 个答案:

答案 0 :(得分:2)

你肯定需要colour表:

colour_id INT PRIMARY KEY
colour_name VARCHAR(255) # or other appropriate data type

然后,如果您知道每个产品总是有两种颜色,那么product表可能如下所示:

product_id INT PRIMARY KEY,
color1 INT NOT NULL FOREIGN KEY (colour.colour_id),
color2 INT NOT NULL FOREIGN KEY (colour.colour_id)

如果产品总是有一种或两种颜色,您可以删除第二个NOT NULL

更灵活的方法是使用第三个表格,允许您为每个产品添加任意数量的颜色:

product table:
product_id INT PRIMARY KEY

product_colors table:
product_id INT FOREIGN KEY (product.product_id)
colour_id INT FOREIGN KEY (colour.colour_id)
PRIMARY KEY(product_id, colour_id)

因此,在这种情况下,两个id字段都是外键,同时形成主键,因此不可能将相同的颜色添加到同一产品两次。

(使用伪SQL语法)

答案 1 :(得分:0)

我想象一下:

Product = Product_ID (PK), Colour_ID (FK)
Colour =  Colour_ID (PK), Colour_Name

 ________________________    _________________________
| Product_ID | Colour_ID |  | Colour_ID | Colour_Name | 
--------------------------  ---------------------------
|____________|___________|  |___________|_____________|