对于我有电子商店
属性名称示例包括:大小,颜色和属性值示例包括:XL,L,红色,蓝色。
存储库存水平的最佳方法是什么? “袋”产品可能有L /红色,但不是XL /红色,而所有尺寸的蓝色可能有库存。每个产品可能有两个以上的属性。
绝对需要第三张桌子。我认为最好的方法是为每个属性添加一列,并为product_id_fk添加一列。这意味着如果为任何产品添加新属性,则需要在Stock表
中创建其他列或者有更好的方法吗?
答案 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`;
顺便说一下,我认为属性表有问题。产品可以包含属性(red
和L
),但(L
和XL
)没有任何意义。属性表不会阻止输入此类数据。我认为真正的属性不是red
,blue
,L
和XL
,而是color
和size
。