2011-12-20 17 views
10

Bir e-ticaret sitesi yapıyorum ve belirli bir süre için belirli ürünlerde indirim yapmak istiyorum.Veritabanındaki öğeler için indirim nasıl ayarlanır?

Ürünüm tablo (MySQL) şöyle görünür:

  • q1: bütün bul alınırken öğeleri için

     
    Deals 
    - dealID 
    - productID (Foreign Key) 
    - discount (fractional value: percentage) 
    - description 
    

    :

     
    Product 
        - productId 
        - Name 
        - Weight 
        - Price (price as on the cover of the item) 
    

    Ben fırsatlar için başka tablo yapayım mı productID ile ürünlerdeki ürünler = anlaşmalar tablosundaki tüm productID'ler

  • q2: fırsatlar tablosundan
  • Q3 indirimle fiyatını güncelle: return tüm ürünler

Bunu yapmak için daha iyi bir yolu var mı? Ayrıca, sadece sınırlı bir süre için mevcut olan anlaşma durumunu nasıl ele alabilirim?

DÜZENLEME: Ürün başına ne kadar indirim sunduğumuzu göstermek istiyorum. Bu nedenle, ürün başına iki değer, orijinal fiyat ve verilen süre için indirimli fiyatlara ihtiyacım var.

ben crontab here

cevap

8

Deals tablonuza bir başlangıç ​​zaman damgası ve bitiş zaman damgası eklemeyi düşünebilirsiniz. Bu şekilde, geçerli tarihin anlaşmanın başlangıç ​​ve bitiş tarihleri ​​arasında olduğundan emin olmak için kontrol edebilirsiniz.

Deals tablonuzun bir dealID ürününe gerçekten ihtiyacı yoktur - bu, productID ve indirimin başlangıç ​​tarihi ile anahtarlanabilir. Ayrıca, belirli bir öğe için fiyatın ne kadar yüksek olabileceğine bağlı olarak, discount alanınızı yeterince hassas bir şekilde (DECIMAL 12,8 gibi bir şey) yapmayı unutmayın. Yerinde olsaydım

, aslındaProduct masa kapalı fiyatını bırakıp Deals tablo oluşturmak yerine bir ProductPricing tablo oluşturmak istiyorum. Bu ProductPricing tablosu, productID ve anahtar alanları olarak bir başlangıç ​​zaman damgasından oluşuyor, ardından fiyatın ne zaman değiştiğini belirtmek için bir bitiş zaman damgasına sahip. Ve tabi ki, öğenin fiyatı.

+0

ürün fiyat tablosu ile anlaşma tablosuna bile ihtiyacınız olmayabilir .. tarihler anahtardır. – Randy

+1

@Randy: "Neden bir Fırsat tablosu oluşturmak yerine" dedim. ;) – Crontab

+0

@ Ürün Optimizasyonu yaklaşımı, bir anlaşma/promosyondan kaynaklanmayan ürünlere fiyat ayarlamalarının yapılmasına izin vermenin ek faydası olduğu için iyi bir çözümdür (örneğin fiyat artışları). Hatta son fiyat değişikliğinin nedenini ProductPricing tablosunda saklayabilirsiniz. –

1

Ben indirim sütun için bir ondalık kullanırsınız önerdiği çözüm için bir izlem yayınlanmıştır.

kapalı

fiyat fiyat * indirim = $ tutarı - $ miktarın off bir son kullanma tarihi sütununda koymak ve sadece süresi dolmamış olan satırları geri dönebilirler Sınırlı bir süre için arabası

yılında = fiyatı.

2

Dikkate alınması gereken bir diğer konu da, belirli bir ürün için indirim yapılmadığında durumu nasıl modellediniz? Bir Null Object modelini burada kullanabilirsiniz - temel olarak, bir ürün oluşturulduğunda,% 0 indirim ve sınırsız süre ile bu ürüne bir anlaşma da ekleyebilirsiniz. Bu şekilde, ürün alma mantığınızı basitleştirebilirsiniz (sorgulamada dış birleştirme yok, fiyatı hesaplamak için if).

0

Ben discountPrice, discountPercentage, masa Ürünün için endDiscountDate sütunu ekleyin ve endDiscountDate

kontrol ederek doğru fiyatı seçebilir zaman masaya katılmak gerek seçme Sonra

izleme indirim tutmak için tablo indirim geçmişini yaratacak

İlgili konular