Lis*_*sa8 3 mysql database-design
我是php和mysql的新手,我负责处理衬衫商店的购物车,并且在存储衬衫属性(例如每件商品的颜色,尺寸和库存)时与数据库设计混淆。
假设将衬衫下面存储到db中:
Product name: Nike shirt
Available colors: black, white, blue
Size: M, L, XL
Stock: Black - M - 5 pc
White - L - 10 pc
Blue - M - 2 pc
Blue - XL - 3 pc
(and so on...)
Run Code Online (Sandbox Code Playgroud)
而不是像上面那样将信息反复存储在表中:
table 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
....
Run Code Online (Sandbox Code Playgroud)
设计表以有效保留这些属性和产品的最佳方法是什么?
我知道可以将多个表联接在一起,但是我需要就这些属性提供建议,以了解如何与差异表分开放置,并在人们进入各自的页面时获取信息并显示出特定尺寸还剩下多少库存?
提前致谢。
这是你的桌子。
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
....
Run Code Online (Sandbox Code Playgroud)
您将看到如何复制产品名称“ Nike Shirt”和颜色“ blue”。在规范化的关系数据库中,我们不想重复任何信息。如果有人在第4行中意外将“ Nike衬衫”更改为“ Nike Skirt”,您会怎么办?
因此,让我们归一化您的表。
我们将从产品表开始。
Product
id product
------ ------------
0 Nike Shirt
Run Code Online (Sandbox Code Playgroud)
通常,数据库ID号以零而不是1开头。
接下来,让我们创建一个颜色表。
Color
id color
------ -------
0 black
1 white
2 blue
Run Code Online (Sandbox Code Playgroud)
接下来,让我们创建一个Size表。
Size
id size
------ -----
0 XS
1 S
2 M
3 L
4 XL
5 XXL
Run Code Online (Sandbox Code Playgroud)
好的,现在我们有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
Run Code Online (Sandbox Code Playgroud)
产品,颜色和尺寸编号是返回到产品,颜色和尺寸表的外键。我们这样做的原因是为了消除信息重复。您可以看到任何一条信息仅存储在一个地方。
Stock表上不需要ID。产品,颜色和大小应该唯一,因此这3个字段可以构成“库存”表的复合键。
在实际的零售商店中,产品可能具有许多不同的属性。这些属性可能存储在键/值表中。对于您的简单表,我们可以将表分解为规范化的关系表。
希望对您有帮助。