Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ważne rzeczy dot. bazy danych
elwierka
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 26.12.2007

Ostrzeżenie: (0%)
-----


Witajcie

Piszę sobie systemik do obsługi sprzedaży elektronicznej. Przyjęłam, że każdy zarejestrowany klient będzie miał własne ustalone rabaty, które się sumuje przy zamówieniu. Ze względu na to, że zestawy rabatów mogą powtarzać się u wielu klientów, stworzyłam w tabeli klienci oddzielne pole - rabat_id, oraz tabelę rabaty:

rabat_id
rabat_a
rabat_b
rabat_c

(przykładowo).

Przy zamówieniu, rabat całkowity będzie obliczany na podstawie sumy wszystkich poszczególnych rabatów. Co jednak, jeśli z bazy danych usunę rabat o określonym nr id? Nie chcę później sytuacji, że się okaże, iż po usunięciu rabatu, w danych o zamówieniu przywróciły się ceny wyjściowe, mimo, że były sprzedane po cenach rabatowych.

Jak to rozwiązać?

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




W takich przypadkach olewa się normalizację i wpisuje do danej tabeli aktualne dane. Przykładowo: robiąc tabelę zamówień produktów w sklepie powinnaś w niej zapisać aktualną cenę produktu, po jakiej został kupiony. Obliczanie ceny na podstawie relacji nie jest dobrym pomysłem - zmienisz cenę produktu to i zmienią się wartości zamówień. Można oczywiście przenieść ceny produktów do osobnej tabeli i przyjąć, że ostatni rekord dla danego produktu to jego aktualna cena (wówczas można pobierać cenę produktu na podstawie relacji). Jednak moim zdaniem jest to przerost formy nad treścią. Aczkolwiek z drugiej strony umożliwiałoby to przegląd historii cen produktu smile.gif
Go to the top of the page
+Quote Post
elwierka
post
Post #3





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 26.12.2007

Ostrzeżenie: (0%)
-----


Czyli, powiedzmy, że jakbym w tabeli zamówienia - zamiast pola rabat_id zrobiła po prostu pole rabat typu int unsigned not null default 0 i przypisała mu wartość = suma wszystkich rabatów dla danego klienta, to powinno być ok?

Czy tabela klienci - ma zawierać pole rabat_id, które będzie kluczem obcym do tabeli rabat, czy lepiej dać po prostu pola rabat1, rabat2, rabat3 itd...dla każdego klienta wpisywać oddzielnie?

Pomyślałam, ze skoro stawki rabatu mogą się powtarzać, to mogę stworzyć dla nich oddzielną tabelę i w momencie reejstracji nowego klienta, można będzie wybrać określony rabat (zestaw rabatów) z istniejących już w tabeli rabaty, albo dodać nowy, poczym wybrać jego.

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 07:43