Özel Alanlarla Ürünleri İşleme için MySQL Tasarım

2 Cevap php

(Aslında, mobilya çeşitleri) bir ürün birkaç farklı türde olabilir bir web uygulaması inşa ediyorum ve bu tür bağlı olarak, ürün ile ilişkili bazı alanlar vardır.

Quick Background: Ben çerçeve olarak CakePHP ile MySQL ve PHP kullanıyorum. Aradığım cevabı mutlaka "CakePHP gibi" olması gerekmez; Ben ilk ve formost genel bir MySQL veritabanı tasarımı en iyi cevabı tercih ederim.

Yani, iki seçenekleri düşünmek yapabilirsiniz:

  1. Single Table Option - Ben mümkün olan tüm alanları ile products bir tablo var ve sadece null olarak belirli ürün için kullanılmaz alanları bırakın. Bu benim basit tasarım düşünüyorum, ama entegrasyonu ayakkabı horning biraz alacağını (benim modeli tarzda takip etmek gerekir ve aslında tipine göre güncelleştirilmesi ne alanlar gibi.)

  2. Multiple Product Table Options - Her ürün belirli bir ürün tipi için uygun alanlar ile kendi tablosunu alır. Orada bir ana tablo (products), en az üç alan id (birincil anahtar), productType (sağ tablo bulmak için) vardır ve {[( 4)]} (ki belirli bir ürün tablosu için bir ürün tablosunu katılır.

Ben # 1 ağır eğilerek, ancak bazı diğer insanların düşüncelerini almak istiyordu.

Eğer daha fazla bilgiye ihtiyacınız olursa haberim olsun! Thanks!

Update: Ben sadece mobilya türleri küçük-ish seti (<10 max şimdiye kadar 20 olacağını, başlatmak için) bekliyor olacak.

2 Cevap

Ben sizin ürünleriniz için niteliklerin birçok farklı çeşit var, en azından id, kullanmak olabilir, soruna bir çözüm varsayalım Entity-attribute-value model.

Temelde, olabilir:

  • Ürün başına bir satır içerir ve her ürün var (examples : a name, a price, a quantity in stock) veri türlü depolar basit bir Product masa,
  • Ürün başına birkaç satır anlamına satıra bir niteliği, - ve başka bir tablo, bu, her bir ürün için, ürünün sahip olabilir özelliklerini saklar.

Tabii ki, aynı zamanda "referans sistemi" bir çeşit gerekir, o tanımlar:

  • Mümkün niteliklerin listesi
  • Her bir öznitelik için olası değerler listesi
  • Ve ürün, bununla ilişkili olabilir farklı özellikleri her tür için.


If you don't want to put in place that kind of system, I would go with something like your second solution :

  • Ben ilk çözüm fikrini sevmiyorum - bu NULL alanları büyük değildir
  • With multi-table options, I would use :
    • Bir Ürün tablo, her bir ürün için bir satır içerir
    • Several ProductTYPE tables
      • ve sınıfları / nesneleri gibi konuşan, o ProductTYPE masaları Product devralan olur
      • Her ürün için, size Product bir satır ve karşılık gelen ProductType tabloda bir satır olurdu, demektir.

Why not use an object or array or even xml?
1.Use an array or object and and then serialize it:

$details = serialize(array('width'=>'1meter','color'='beatiful'));

Veya xml kullanmak ve veritabanındaki xml dosyasının sadece yolunu saklayın.