这是你的桌子。
Shirt
id product color size stock
---------------------------------------------
1 Nike Shirt black M 5
2 Nike Shirt white L 10
3 Nike Shirt blue M 2
4 Nike Shirt blue XL 3
....
您会看到如何复制产品名称“Nike Shirt”和颜色“蓝色”。在规范化的关系数据库中,我们不想重复任何信息。如果有人不小心将第 4 行中的“Nike Shirt”更改为“Nike Skirt”,您认为会发生什么?
让我们正常化 https://en.wikipedia.org/wiki/Database_normalization你的桌子。
我们将从产品表开始。
Product
id product
------ ------------
0 Nike Shirt
通常,数据库 ID 号从零开始,而不是从一开始。
接下来,让我们创建一个颜色表。
Color
id color
------ -------
0 black
1 white
2 blue
接下来,让我们创建一个尺寸表。
Size
id size
------ -----
0 XS
1 S
2 M
3 L
4 XL
5 XXL
好的,现在我们有 3 个独立的对象表。我们如何将它们放在一起以便我们可以看到库存有哪些?
您对原始表格的想法是正确的。
Stock
id product color size stock
---------------------------------------------
0 0 0 2 5
1 0 1 3 10
2 0 2 2 2
3 0 2 4 3
产品、颜色和尺码编号是返回到“产品”、“颜色”和“尺码”表的外键。我们这样做的原因是为了消除信息的重复。你可以看到,任何一条信息都存储在一处,而且只存储在一处。
Stock 表中不需要该 id。产品、颜色和尺寸应该是唯一的,因此这 3 个字段可以构成 Stock 表的复合键。
在实际的零售店中,产品可能具有许多不同的属性。这些属性可能会存储在键/值表 https://en.wikipedia.org/wiki/Key-value_database。对于您的简单表,我们可以将表分解为规范化的关系表。