2013-01-07 15 views
5

Ürün filtrelemeyi kategoride uygulamak istiyorum ve doğru DB şemasıyla ilgili sorularım var. Şimdilik Ben Aşağıdaki tablolarda:Ürün özellikleri için veritabanı şeması

Kategoriler:

1. id 
2. category 
3. description 

Ürünler:

1. id 
2. category_id 
3. product 
4. image 
5. price 

Nitelikler:

1. id 
2. attribute 

Category_Attributes:

1. category_id 
2. attribute_id 

oysa benim soru oluşturup neler sütunların değerler farklı türde saklamak zorunda bağırmak gereken tablolar olduğunu, değerler, ürünler vb özellik değerleri bağlıyor

misiniz

Değerler:

o 3 daha tablolar oluşturmak için normal olabilir 10

Attributes_Values ​​:

1. attribute_id 
2. value_id 

Products_Attributes_Values ​​: Geçen tablolarda mahvettigini

1. product_id 
2. attribute_id 
3. value_id 

. Depolamak ve filtrelemek daha iyi olurdu?

+0

Son üç tablonuzda ne yapmak istediğinizle ilgili daha fazla bilgi verir misiniz? Her tablonun anlamı nedir? Değerler standart bir liste mi olmalıydı? Bu liste kategoriye mi bağlı? Bir ürün bir özellik için birden fazla değere sahip olabilir mi? Gereksinimlerinizi daha iyi anlamadan size tavsiyede bulunmak zordur. –

+0

Örneğin "Boncuk" kategorisine sahibim, birkaç özelliği olacaktır: Çap, Malzeme, Paketleme. Çapları 8mm, 10mm, 12mm vb olacak, malzeme de plastik, ahşap, cam, metal, seramik değişebilir. Yönetici alanında tüm özellikler için seçimler yapmak ve tek seçeneği seçmek istiyorum. Ve katalogda mallarımı filtrelemek istiyorum, örneğin çapı 10mm, 12mm ve malzeme Ceramic ile Boncukları arıyorum. – UAMoto

+0

Evet, her kategori kendi niteliklerine sahip olacak ve bu özniteliklerin değerleri olacaktır. – UAMoto

cevap

8

Ne elde etmek çalıştığınız bir Varlık-Özellik-Değer (EAV) ya da muhtemelen bir satır modelleme çözümdür. Bu tür bir yapının çok çeşitli oldukça iyi nedenlerden dolayı büyük ölçüde çatıştığına dikkat edin.

Ancak, ben o EAV değil mi dışında, KÖTÜ (örneğin here, here, here ve here) savundular. Bu nadir istisnalardan biri, ürünlerin özelliklerini izlediğiniz ve bu özelliklerin bu kadar ilginç olmadığı durumlarda (sisteminize!), bunları almanız ve yazdırmanız gerektiğinden başka bir ürün kataloğunun bulunmasıdır. gerektiğini

enter image description here

belirli bir kategorideki ürünler bağlıyor anlatıyor böyle bir modelde ne yapıyorsun: vb bir ürün web sayfası veya bir karşılaştırma ızgara üzerinde

böyle bir tasarım düşünün sahip olmak, bu özelliklerin ne gibi değerlere sahip olabileceğini ve her bir spesifik ürün için hangi değerlere sahip olduğunu ch özniteliği.

Bu tasarım, EAV'nin uyguladığı tüm normal sınırlamalara sahiptir.Ancak, şu soruları sormak isterseniz: "Hangi boncukların çapı 8mm?" Bu oldukça düz ileri.

+0

'eav' kullanırsak performans problemleriyle yüzleşmiyor muyuz? performans sorunlarını çözmek için hangi önerileri karşılayacağınıza bakarsak, bunu önlemek için herhangi bir yol var mı? – fresher

+0

@PhpBeginner Evet, EAV kullanmanın getirdiği çeşitli zorluklar olabilir, işte bu yüzden birçok insan bunu bir anti-desen olarak görüyor. Kendimi kesinlikle EAV'ın mükemmel şekilde uygun olduğu özel durumlar haricinde EAV kullanmam. Burada (http://stackoverflow.com/questions/11779252/entity-attribute-value-table-design/11972029#11972029) ve başka bir yerde çevrimiçi ürün kataloglarının bu uygulamalardan biri olduğunu ileri sürdüm. Bu senaryoda, EAV bir performans kaygısı olmayacaktır ve tam anlamsal veri modellemesi uygulanmış olduğundan çok daha basit bir kodla çalışacaktır. –

İlgili konular