2011-12-20 7 views
10

Buduję witrynę e-commerce i chciałbym oferować rabaty na niektóre produkty przez ograniczony czas.jak modelować rabat na przedmioty w bazie danych?

Moja Tabela produktów (MySQL) wygląda następująco:

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

powinienem dokonać innego stolika dla promocji:

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

za zdobycie pozycji:

  • Q1: Znajdź wszystkie produkty w produktach o ID produktu = wszystkie identyfikatory produktów w tabeli ofert
  • Q2: Aktualizacja cenę z rabatem od stołu Okazje
  • Q3: powrót wszystkie produkty

Czy istnieje lepszy sposób to zrobić? Ponadto, jak mam sobie poradzić z przypadkiem umowy istniejącej tylko przez ograniczony czas?

EDYTOWANIE: Chciałbym wyświetlić, ile rabatu oferujemy za produkt. Dlatego potrzebuję dwóch wartości na produkt, pierwotnej ceny i zdyskontowanej ceny za dany okres.

Zamieściłem Nawiązanie do rozwiązania zaproponowanego przez crontab here

Odpowiedz

8

Możesz rozważyć dodanie początkowego znacznika czasu i końcowego znacznika czasu do tabeli Deals. W ten sposób możesz sprawdzić, czy bieżąca data jest pomiędzy datą rozpoczęcia i zakończenia umowy.

Twoja tabela nie potrzebuje dealID - może być wpisana z productID i datą rozpoczęcia zniżki. Ponadto, w zależności od tego, jak wysoka może być cena dla danego przedmiotu, pamiętaj, aby twoje pole discount było wystarczająco precyzyjne (coś w stylu: DECIMAL 12,8).

Gdyby mnie, bym faktycznie opuszczą cenę off od ze stołu Product i stworzyć ProductPricing tabeli zamiast tworzyć Deals tabeli. Tabela ProductPricing składałaby się z productID i początkowego znacznika czasu jako pól kluczowych, a także ma końcowy znacznik czasu wskazujący, kiedy ta cena uległa zmianie. I, oczywiście, cena przedmiotu.

+0

z ceną produktu, może nie być nawet potrzebna tabela transakcji. Daty są kluczowe. – Randy

+1

@Randy: właśnie dlatego powiedziałem "zamiast tworzyć tabelę umów". ;) – Crontab

+0

@Crontab Podejście ProductPricing to dobre rozwiązanie, ponieważ ma dodatkową zaletę, ponieważ umożliwia dostosowanie cen do produktów, które nie pochodzą z umowy/promocji (np. Podwyżki cen). Możesz nawet zapisać przyczynę ostatniej zmiany ceny w tabeli ProductPricing. –

1

chciałbym użyć po przecinku dla kolumny dyskontowej.

cena * zniżka = $ kwota off

cena - $ kwota off = cena w koszyku

ograniczonym czasie można umieścić w kolumnie data ważności, a jedynie powrót wiersze, które nie są przeterminowane.

2

Kolejną rzeczą, którą należy wziąć pod uwagę, jest to, w jaki sposób modelujesz sytuację, gdy nie ma rabatu na dany produkt? Możesz użyć tutaj wzoru Null Object - w zasadzie, gdy produkt jest tworzony, dodajesz także ofertę na ten produkt z 0% zniżką i nieograniczonym czasem. W ten sposób można uprościć logikę pobierania produktów (brak zewnętrznych sprzężeń w zapytaniu, nr if do obliczania ceny).

0

Dodam discountPrice, discountPercentage, endDiscountDate kolumnę tabeli produktów i utworzyć tabelę dyskontowej historię, aby utrzymać zniżki śledzenia

Wtedy kiedy select nie trzeba dołączyć tabelę można wybrać właściwą cenę sprawdzając endDiscountDate