Promocje czasowe - wybór optymalnego rozwiązania

0

Cześć,
piszę sobie promocje czasowe na potrzyby sklepu internetowego i tu się pojawia moje pytanie. Zastanawiam się nad tym w jaki sposób to zrobić najlepiej.
Ogólnie do tej pory mam zrobionne tylko sam fakt dodawania promocji, ilość promocji w procentach, no i edycja i usuwanie. Teraz do tego chcę dorobić jeszcze czasowe. Aktualnie wszystko zapisuję w tabeli promo, która wygląda tak:

id_promo | product_id | percent promo
---------------- | -------------------
1 | 17 | 33
2 | 3 | 12

Czy najlepszym sposobem będzie dodanie do tej tabeli nowej kolumny zawierającej czas promocji czy lepiej stworzyć nową tabelę zawierającą tylko czasy?

0

Dodaj do tej tabelki timestamp z czasem zakonczenia promocji i bedziesz mial elegancko po wybraniu z bazy info ile jaka promocja sie konczy. Jesli puscisz crona co minute ze skryptem ktory ma zmieniac status na zakonczone to jestes w domu

1

i rozpoczęcia też. Przecież nie każesz komuś siedzieć do 23:59 aby o 0:00 kliknąć dodaj jeśli promocja ma obowiązywać od godziny 0:00.

BTW jaki cron, jaki skrypt, jaki status??? Przecież to masz na podstawie aktualnej daty/czasu i przedziału obowiązywania promocji

0

Z punktu widzenia normalizacji bazy danych nie ma powodu, by wydzielać te dwie dodatkowe kolumny ("od" - "do") do osobnej tabeli.

Jeśli już, to czasy mają większe prawo znajdować się w głównej tabeli promo, niż ID produktu. Każda promocja musi mieć "od" i "do": nie będzie nagle 5 różnych czasów na promocję, bo co miałyby reprezentować.

A liczba produktów objętych promocją może się przecież zmieniać. W przyszłości (teoretycznie) mogą postawić się inne formy promocji - 2 w cenie 1, kup kapcie weź zniżkę na piwo itp.

Założenie, że jedna procentowa promocja odpowiada na sztywno jednemu konkretnemu produktowi, jest bardziej podatne na dezaktualizację niż założenie, że promocja ma swój początek i koniec.

0

Tak jak mówią poprzednicy - dodaj dwie kolumny: czas rozpoczęcia i czas zakończenia. Pytanie, co gdy promocja nie będzie ograniczona czasowo. Wtedy rozwiązania są dwa. Jedno takie, że w oba pola ląduje NULL, a drugie takie, że data rozpoczęcia jest jakąś tam minimalną datą, a data zakończenia np. 100 lat wprzód. Gorzej jak Twój sklep przetrwa te 100 lat i ktoś zapomni o tym, żeby promocję przedłużyć ;P

1 użytkowników online, w tym zalogowanych: 0, gości: 1