MySQL:产品,属性,库存水平

时间:2010-06-29 13:21:12

标签: mysql

对于我有电子商店

  • 产品表(ID,名称,价格,描述)
  • 属性表(属性名称,属性值,product_id_fk)

属性名称示例包括:大小,颜色和属性值示例包括:XL,L,红色,蓝色。

存储库存水平的最佳方法是什么? “袋”产品可能有L /红色,但不是XL /红色,而所有尺寸的蓝色可能有库存。每个产品可能有两个以上的属性。

绝对需要第三张桌子。我认为最好的方法是为每个属性添加一列,并为product_id_fk添加一列。这意味着如果为任何产品添加新属性,则需要在Stock表

中创建其他列

或者有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

看起来您有多对多的关系(即,产品可以有许多属性,属性可以与许多产品相关联)。因此,您最好的设计是拥有一个包含产品和属性的ID的关系表。

products (id, name, price, description)
attributes (id, attribute name, attribute value)
product_attribute (product_id (PK,FK), attribute_id (PK,FK)) 

如果每个物理项都有一个唯一的行,则此方法有效。如果不这样做,那么你需要有能够处理不同类型产品的东西。

product (id, name, price, description)
product_type (id, product_id (FK), count)
attributes (id, attribute name, attribute value)
product_attribute (product_type_id (PK,FK), attribute_id (PK,FK))

PK =主键 FK =外键

答案 1 :(得分:-1)

为什么不创建这样的表:

show create table product\G
*************************** 1. row ***************************
       Table: product
Create Table: CREATE TABLE `product` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) NOT NULL,
  `price` float NOT NULL,
  `color` enum('red','blue') NOT NULL,
  `size` enum('L','XL') NOT NULL,
  `stocklevel` int(11) NOT NULL,
  `description` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

当然,它具有有限数量的属性,但是根据需要更改表以添加其他属性并不困难。

例如,要添加其他颜色类型:

ALTER TABLE product MODIFY COLUMN `color` ENUM('red','blue','green') AFTER `price`;

并添加其他属性:

ALTER TABLE product ADD COLUMN `condition` ENUM('good','bad','ugly') AFTER `size`;

顺便说一下,我认为属性表有问题。产品可以包含属性(redL),但(LXL)没有任何意义。属性表不会阻止输入此类数据。我认为真正的属性不是redblueLXL,而是colorsize