我有一个购物车,我必须跟踪库存,这包括带有属性的库存。例如:
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
有人能建议更好的方法将这些信息存储在数据库中吗?我想过使用查找表,但由于属性数量的不同,这不起作用。
答案 0 :(得分: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,attribute_description:men}
现在你的第一件衬衫是蓝色小女士衬衫,第二件衬衫是红色男士衬衫。所以你的ShirtAttribute表将有这些recrods:
{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。
答案 1 :(得分:1)
属性表有什么问题?
create table Attributes (
Id int not null identity etc,
CartItemId int not null foreign-key etc,
Name nvarchar(32),
Value nvarchar(32)
)