Pergunta

Eu tenho um carrinho de compras em que eu tenho que manter o controle de estoque, e isso inclui ações com atributos. Por exemplo:

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

Estes campos estão actualmente separados por vírgulas no banco de dados e os IDs seria o seguinte:

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

em que cada número representa um atributo específico (1 = azul, 3 = pequeno). O problema é que este, em seguida, torna-se muito difícil trabalhar com que os dados não é atômica no banco de dados, mas eu não posso pensar como estruturar a mesa, como não poderia ser infinitamente muitas combinações de itens, tais como:

blue, small, long-sleeved

Alguém pode sugerir uma maneira melhor de armazenar essas informações no banco de dados? Pensei em usar lookup tabelas, mas isso não iria funcionar devido ao número variável de atributos.

Foi útil?

Solução

Table: Camisa {shirt_id}

Tabela: ShirtAttributeDefinitions {attribute_id, attribute_description}

Table: ShirtAttribute {shirt_id, attribute_id}

Desta forma, você pode manter a definição de novos ShirtAttributes adicionando registros a tabela: ShirtAttributeDefinitions.

Exemplo:

Você tem duas camisas: {shirt_id: 1}, {shirt_id: 2}

Você tem cinco atributos da camisa: {attribute_id: 1, attribute_description: azul}, {attribute_id: 2, attribute_description: small}, {attribute_id: 3, attribute_description: senhoras}, {attribute_id: 4, attribute_description: red}, { attribute_id: 5, attribute_description: homens}

Agora, sua primeira camisa é uma camisa azul pequenas senhoras, ea segunda é uma camisa dos homens vermelho. Então sua mesa ShirtAttribute terá esses 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}

Embora esta abordagem funciona, o seu melhor para fazer esses atributos campos da tabela de camisa. Desta forma, você pode ter certeza de que uma camisa não tem ambos os 'homens' e atributo 'ladies'. Este método é apenas uma abordagem suja que estritamente está em conformidade com a sua pergunta.

JRH.

Outras dicas

O que há de errado com um Atributos mesa?

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

?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top