Alan atom kalır, böylece nasıl bir tablo yapısı olabilir?

2 Cevap php

Ben stok takip tutmak zorunda, ve bu özelliklere sahip hisse senedi içeren bir alışveriş sepeti var. Örneğin:

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

Bu alanlar şu anda veritabanında virgülle ayrılır ve aşağıdaki gibi kimlikleri olacaktır:

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

her sayı belli bir niteliği (3 = küçük, 1 = mavi) temsil eder. Sorun bu daha sonra veri veritabanında atomik değil gibi çalışmak çok zor olur, ama gibi öğelerin sonsuz sayıda kombinasyonları olabilir gibi ben, tablo yapısı nasıl düşünemiyorum ki:

blue, small, long-sleeved

Herkes veritabanında bu bilgileri saklamak daha iyi bir yol önerebilir? Ben arama tabloları kullanarak düşündüm ama bu durum niteliklerin değişen sayıda işe yaramaz.

2 Cevap

Tablo: Gömlek {shirt_id}

Tablo: ShirtAttributeDefinitions {attribute_id, attribute_description}

Tablo: ShirtAttribute {shirt_id, attribute_id}

ShirtAttributeDefinitions: Bu şekilde, Tablo kayıtları ekleyerek yeni ShirtAttributes tanımlama tutabilirsiniz.

Example:

iki gömlek var: {shirt_id: 1}, {shirt_id: 2}

{attribute_id: 1, attribute_description: blue}, {attribute_id: 2, attribute_description: small}, {attribute_id: 3, attribute_description: bayanlar}, {attribute_id: 4, attribute_description: red}, {attribute_id: beş gömlek nitelikleri var 5 , attribute_description: men}

Şimdi ilk gömlek mavi bir küçük bayan gömlek ve ikinci bir kırmızı bir erkek tişört. Yani ShirtAttribute tablo bu recrods sahip olacaktır:

{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}

Bu yaklaşım, Gömlek tablonun bu nitelikler alanları yapmak için, onun en iyi çalışır rağmen. Eğer bir gömlek hem 'erkek' ve 'bayan' özniteliği yok emin olun bu şekilde. Bu yöntem kesinlikle sorunuza uygun sadece kirli bir yaklaşımdır.

JRH.

ne bir Öznitelikler tablo ile yanlış?

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

?