1

我有一个购物车,我必须在其中跟踪库存,这包括带有属性的库存。例如:

shirt
 -- blue, small  = 50
 -- blue, medium = 22
 -- blue, large  = 53
 -- red,  small  = 15
 etc...

这些字段目前在数据库中用逗号分隔,ID 如下:

1,3
1,4
1,5
2,3

其中每个数字代表一个特定属性(1=蓝色,3=小)。问题是这变得非常难以处理,因为数据在数据库中不是原子的,但我不知道如何构造表,因为可能有无限多的项目组合,例如:

blue, small, long-sleeved

任何人都可以建议一种更好的方式将这些信息存储在数据库中吗?我想过使用查找表,但由于属性数量不同,这不起作用。

4

2 回答 2

4

表:衬衫 { shirt_id }

表: ShirtAttributeDefinitions{ attribute_id , attribute_description }

表: ShirtAttribute{ shirt_id , attribute_id }

这样,您可以通过向 Table:ShirtAttributeDefinitions 添加记录来继续定义新的 ShirtAttributes。

例子:

你有两件衬衫:{ shirt_id:1 }, { shirt_id:2 }

你有五个衬衫属性:{attribute_id:1, attribute_description:blue }, {attribute_id:2, attribute_description:small }, {attribute_id:3, attribute_description:ladies }, {attribute_id:4, attribute_description:red }, {attribute_id:5 , 属性描述:人 }

现在你的第一件衬衫是一件蓝色的小女士衬衫,第二件是一件红色的男士衬衫。所以你的 ShirtAttribute 表将有这些记录:

{shirt_id:1, attribute_id:1}, {shirt_id:1, attribute_id:2}, {shirt_id:1, attribute_id:3}, {shirt_id:2, attribute_id:4}, {shirt_id:2, attribute_id:5}

尽管这种方法有效,但最好将 Shirt 表的这些属性字段设置为。通过这种方式,您可以确保衬衫不会同时具有“男士”和“女士”属性。这种方法只是一种严格符合您的问题的肮脏方法。

jrh

于 2009-06-17T13:26:24.753 回答
1

属性表有什么问题?

create table Attributes (
    Id int not null identity etc,
    CartItemId int not null foreign-key etc,
    Name nvarchar(32),
    Value nvarchar(32)
)

?

于 2009-06-17T13:34:08.980 回答