Baza danych sklepu - zamówienie składające się z kilku towarów

0

Witam.

Oto moja baza danych sklepu gdzie można wykupić sobie dostęp do kursu video. Niestety dopiero dziś zauważyłem pewien problem. A mianowicie nie wiem co powinienem zrobić, aby dane zamówienie (id_zamowienia) mogło posiadać wiele kursów (id_kursy). Szukam rozwiązania jak najmniej inwazyjnego w obecną. Zapewne będę musiał oddzielić koszyk od zamówień (teraz rozdziela je tylko pole status) i wyłączyć AI w id_zamowienia, lecz nie mam pomysłu jak to powinno działać. Proszę o pomoc i wskazówki.

status varchar(15) - "w koszyku", "zamówione", "odblokowane"

9f9bcd3d63bfe.png
0

Generalnie Twoje rozwiązanie jest poprawne mamy tą informację, którą chcesz. Tworzy się osobną tabelę, która zawiera informacje o zamówieniu oraz o produktach wchodzących w jego skład. Pytanie jakie powinieneś sobie zadać to czy klient może zamówić dwa razy ten sam kurs - np. klient może chcieć ten sam kurs dla wielu użytkowników. Druga sprawa to czy cena może być zmienna w czasie. Teraz jeżeli cena kursu się zmieni to jeżeli użytkownik będzie chciał zobaczyć za ile coś kupił to wyświetli mu się aktualna cena (no chyba, że nowa cena to będzie nowy kurs w bazie). Wówczas do tej tabeli powinieneś dodać odpowiednie atrybuty.

0
mariano901229 napisał(a):

Generalnie Twoje rozwiązanie jest poprawne mamy tą informację, którą chcesz. Tworzy się osobną tabelę, która zawiera informacje o zamówieniu oraz o produktach wchodzących w jego skład. Pytanie jakie powinieneś sobie zadać to czy klient może zamówić dwa razy ten sam kurs - np. klient może chcieć ten sam kurs dla wielu użytkowników. Druga sprawa to czy cena może być zmienna w czasie. Teraz jeżeli cena kursu się zmieni to jeżeli użytkownik będzie chciał zobaczyć za ile coś kupił to wyświetli mu się aktualna cena (no chyba, że nowa cena to będzie nowy kurs w bazie). Wówczas do tej tabeli powinieneś dodać odpowiednie atrybuty.

Klient nie może kupić kursu 2 razy, ponieważ występuje on tylko i wyłącznie w formie cyfrowej (dostęp na stronie internetowej). Po zakupie odblokowuje mu się dostęp do kursu. Cena nie będzie zmienna w czasie (to jest mój projekt na zajęcia - studia Informatyczne), tak naprawdę sklep nie będzie funkcjonował.

Ok, czyli rozumiem, że schemat jest w miarę poprawny. Pytanie tylko jak robić inserty do tabel ZAMOWIONE_KURSY oraz ZAMOWIENIA, aby wszystkie kursy w koszyku (status="koszyk") miały ten sam id_zamowienia. Rozwiązanie powinno być też skutecznie w razie zamawiania z kilku kont na raz :(

0

Na pytanie o generowanie unikalnych wartości dla pola id_zamowienia nie ma jednej odpowiedzi, ponieważ dużo zależy od wyboru silnika bazy danych.
W bazach Firebird i Interbase możesz stworzyć tzw. generatory dostarczające unikalne wartości typu INT np. tak :

CREATE GENERATOR GeneratorIdZamowienia

a w ten sposób pobierasz nową unikalną wartość

select GEN_ID(GeneratorIdZamowienia, 1) as newIdZamowienia  from rdb$database 

Funkcjonalność takiego generatora można uzyskać również programowo np budując odpowiednią procedurę składowaną operującą na tabeli z licznikami . Sposobów jest co najmniej kilka

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