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 :(