MySQL数据库,用于存储产品、颜色、大小和库存
我对php和mysql非常陌生,我有一个任务是处理衬衫商店的购物车,在存储衬衫属性(如颜色、大小和每件商品的库存)时,我与数据库设计相混淆 假设将以下衬衫存储到db:MySQL数据库,用于存储产品、颜色、大小和库存,mysql,database-design,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
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...)
而不是像这样在表中迭代存储上述信息:
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
....
设计表格以有效保持这些属性和产品的最佳方法是什么
我知道可以将多个表连接在一起,但我需要关于这些属性的建议,关于如何使用差异表单独放置,以及在人们转到相应页面时获取信息,并向他们显示特定大小的剩余库存量
提前谢谢。这是您的桌子
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”和颜色“blue”的。在规范化关系数据库中,我们不希望复制任何信息。如果有人不小心将第4排的“Nike衬衫”改为“Nike裙子”,您认为会发生什么
那么,让我们来看看你的桌子
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
....
我们将从产品表开始
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
产品、颜色和尺寸编号是返回产品、颜色和尺寸表的外键。我们这样做的原因是为了消除信息的重复。您可以看到,任何信息都存储在一个位置,并且仅存储在一个位置
库存表上不需要id。产品、颜色和大小应该是唯一的,因此这三个字段可以构成Stock表的复合键
在实际的零售商店中,产品可能具有许多不同的属性。这些属性可能存储在一个数据库中。对于简单表,我们可以将表分解为规范化的关系表
我希望这对您有所帮助。用代理键替换文本标识符不是正常化。原始功能依赖项(产品、颜色、大小)->库存在最终版本中保持不变,事实上已完全规范化reaanb 2015年7月31日21:33这是一个极其复杂的商业领域。您建议的单表布局有几个挑战。首先,大量重复条目是数据库设计中的一种气味。其次,它假设所有实体都具有相同的属性——正如@gilbertleblanc所写的,现实世界中的应用程序可能需要存储许多其他属性(制造商、材料、过敏信息等) 因此,我将把它分为两个问题:
- 存在哪些产品和变体
- 每种商品我们有多少存货
products
----------
id
name
color
size
product_stock
------------
product_id
stock_quantity
在现实生活中,库存表通常是一个交易分类账——移动的总和为您提供当前库存金额
product_id date movement
---------------------------------
1 1 Jan 2021 10
1 2 Jan 2021. -1
1 3 Jam 2021. -4
这取决于你想要什么级别,你可以有一张桌子,你可以有2,3,4,5,10。。这一切都取决于你的解决方案有多大。这是家庭作业还是企业业务。可以是一张桌子,里面有产品,T恤。。。一个是供应商。。耐克。。。一个有属性的。。。比如颜色,大小,性别。。。处理您的存储库(库存)的人。。。。你明白我的意思了。我建议您阅读关于@MrSimpleMind的内容,如果您能粗略地给我画一张表,特别是关于股票的,我将不胜感激。用代理键代替文本标识符不是正常化。原始的功能依赖项
(产品、颜色、大小)->库存在最终版本中保持不变,实际上已完全规范化。这是一个“过度规范化”的示例。这与规范化无关。@gilbert le blanc您如何查询此表?如果您希望在一个页面上向用户显示具有不同颜色的同一产品,用户可以在其中更改颜色(从而更改产品),您将如何将所有这些产品链接在一起?