我正在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)分别是两个主键还是一个外键,但如果一个是外键,我需要一个主键吗?表
谢谢,
答案 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 |
-------------------------- ---------------------------
|____________|___________| |___________|_____________|