Gördüğüm gibi, bunu iki yoldan biriyle çözebilirsiniz:
Kategori özel bir ürün türüdür
Bu, veritabanınızdaki herhangi bir ürün için, aynı tablo ürününe işaret eden yabancı bir anahtar içerdiği anlamına gelir. Bir ürün, yalnızca yabancı anahtarı söz konusu ürünün kimliğine eşit hiçbir ürün yoksa bir üründür. Başka bir deyişle, altında ürün yoksa, bir üründür.
Bu işleri kolaylaştırır. Mülkler için ürünler bire çok ilişkisine sahip olur ve bu nedenle kategorileriniz de ürün oldukları için bire çok ilişkisine sahiptir. Bir kategoriye özellik eklemek, programınızdaki bir ürüne özellik eklemek kadar kolay olacaktır. Tüm özelliklerin yüklenmesi, ürünün özelliklerinin, ilişkili kategori ürününün özellikleriyle birleştirilmesi ve siz üst öğe içermeyen bir kategori ürününe ulaşıncaya kadar devam etmesi anlamına gelir.
E-ticaret uygulamanızın bu ayrımı yapması gerekir, ancak yine de bir kategorideki ürünleri yükleyecekseniz, bir kategori veya ürünle ilgilenip ilgilenmediğinizi bilmek bir performans kaybı değildir. Ayrıca, her ürün (kategori) fazladan iş yapmadan bir alt ürün listesine açılacağı için ağaç modasında ürün seviyesine arama yapmayı da iyi bir şekilde ödünç vermektedir.
Bunun dezavantajı elbette bir kategori için mantıklı olmayan üründe mevcut ekstra bilgiler üründe garip kullanılmayan alanlar yaratacaktır. Bu çözüm uygulamanızda daha esnek olsa da, biraz daha sezgiseldir.
Çoktan çoğa ilişki
Ürünler artık mülkiyet ile bileşik bir ilişki içinde değil. Bu ikisini birbirine bağlayan hem ürün tablosu hem de özellik tablosunun yabancı anahtarlarıyla bir ProductProperty tablosu oluşturursunuz. Benzer şekilde, özellik tablosu ile çoktan çoğa ilişkisine sahip bir kategori tablonuz ve hem kategori tablosu hem de özellik tablosunun yabancı anahtarlarına sahip bir CategoryProperty tablosu var.
Ürünün kendisi, kategori ile çoktan bire bir ilişkiye sahip olacak ve iyi bir resmileştirilmiş seçme ifadesi ile hem ürün hem de kategoriyle ilgili benzersiz özelliklerin bir listesini oluşturmanıza izin verecektir.
Veri tabanı açısından, bu kesinlikle daha temiz ve daha esnektir. Sorgunuz doğru şekilde yapılırsa, uygulamanız büyük olasılıkla doğrudan CategoryProperty veya ProductProperty ile uğraşmadan yapabilir. Ancak, kategoriyi veya ürünü mülk sahibi olarak değerlendirmemelisiniz. Programınız içinde kendi varlığı olmalıdır. Bu aynı zamanda söz konusu mülklerin yönetiminin mülkün kendisinin yaratılması, daha sonra iki ayrı adımda bir kategori veya ürünle ilişkilendirilmesi anlamına geleceği anlamına gelir. Kesinlikle ilk çözümden daha fazla iş, ama hiçbir şekilde daha zor.
Buna ek olarak, özelliklerinden herhangi biri başkaları tarafından kullanılıyorsa, kategorinin veya ürünün silinmesi üzerine ek bir kontrol yapmanız gerekir (belirli bir ürünün / kategorinin tüm ilgili özelliklerini güvenli bir şekilde ortadan kaldırabileceğiniz ilk çözümün aksine) .
Sonuç
Profesyonel bir bağlamda, çoktan çoğa yaklaşımı kullanarak üründen ve üründen ekstra mil ve mesafe kategorisine giderdim. Verilerin örtüşmesi olasılığı yoktur ve bir anlamda, bu üçünün her birinin kendi varlığı olarak düşünülmesi daha kolaydır. Ancak, ilk çözüm hiçbir şekilde kötü bir çözüm değildir, çünkü daha basit bir uygulama yazmanıza izin verir. Sadece bir çözümden diğerine geçmeniz gerekebileceğini düşünüyorsanız, ikincisini seçmek muhtemelen sizin yararınıza olacaktır.
İyi şanslar!