Pytania na początek: 1. Czy liczy się dla nas customer service czy mamy ich * Jeżeli tak, to mamy też bazę klijentów zarejstrowanych z przypisanymi biletami. * W takim wypadku czy jesteśmy też tak fajni jak koleje śląskie? * Jeżeli tak, to mamy też ludzi bez id ale z możliwością zakupu biletu. * Jeżeli nie, to biety kupuje się telefonicznie i nasz pracownik wprowadza dane do bazy. 2. Czy kupione bilety na miejscu też wprowadzamy do systemu? 3. Czy Rejsy wynajęte są po trasach ustalonych przez firmę czy przez klijenta? 4. Do jakiego okresu w przyszłość udostępniamy możlowisć bookingu rejsu? 5. Co ile publikujemy nowy rozkład? --- - [x] Mamy więc rejsy wg rozkładu po ustalonych trasach. - [x] Mamy taksówki z ustaloną liczbą miejsc i informacją o desęności oraz sprawności. - [x] Mamy bilety kupione z wyprzedzeniem i na miejscu. - [x] Mamy rejsy prywatne otwarte i zamknięte. - [x] Mamy uzytkowników, którzy mogą kupić bilet bez dodatkowego wypełniania danych oraz takich którzy mogą być niezalogowani z koniecznością wprowadzenia danych 1. Mamy wyspy z rozróżnialnymi identyfikatorami; 2. Mamy taksówki z rozróżnialnymi identyfikatorami; 3. Mamy połączenia między wyspami; 4. Z conajmniej 1 połączenia tworzymy trasę 5. Na każdą trasę przypada rejs 6. Na każdy rejs przypada sprawna taksówka 7. Na każdy rejs przypada n biletów, n = liczba miejsc 8. Rejsy rozkładowe przechowujemy w rejsach 9. Rejsy prywatne przechowujemy w rejsach Proponuję zatem tabele: |Taksówka| | | | |:------:|:--:|:--:|:--:| |id_taksowki<br/>int|liczba_miejsc<br/>int|czy_sprawna<br/>bit|czy_dostępna<br/>bit| |Wyspa| | |:---:|:--:| |id_wyspy<br/>int|nazwa_wyspy<br/>text| |Polaczenie| | | | | |:--------:|:--:|:--:|:--:|:--:| |id_polaczenia<br/>int|wyspa_A<br/>int|wyspa_B<br/>int|czas_przebycia<br/>timestamp|odleglosc_pomiedzy<br/>decimal| |Trasa | | | |:------:|:--:|:--:| |id_trasy<br/>int|id_polaczenia<br/>int|nr_porzadkowy_polaczenia_w_trasie<br/>int| Połączenia o wspólnym id_trasy tworzą trasę |Rejs | | | | | | | |:---:|:--:|:--:|:--:|:--:|:--:|:--:| |id_rejsu<br/>int|id_trasy<br/>int|id_taksowki<br/>int|data_godzina_wypłynięcia<br/>timestamp|liczba_dostępnych_miejsc<br/>int|publiczny<br/>bit|otwarty<br/>bit| Jeżeli jest publiczny to zawsze jest otwarty Jeżeli jest prywatny to może być otwarty - 1 z możliwością dołączenia lub zamknięty - 0 Liczba_dostępnych_miejsc = Taksówka.liczba_miejsc-sum(Bilet.liczba_osob) |Bilet | | | | | | | | |:-------:|:--:|:--:|:--:|:--:|:--:|:--:|:--:| |id_biletu<br/>int|id_rejsu<br/>int|imię_nazwisko<br/>text|liczba_osob<br/>int|wyspa_poczatkowa<br/>int|wyspa_koncowa<br/>int|cena<br/>decimal|czy_prywatny<br/>bit| |Uzytkownik | | | | |:------------:|:--:|:--:|:--:| |id_uzytkownika<br/>int|imię_nazwisko<br/>text|email<br/>text|pass<br/>text| * może jeszcze chcemy? |Historia_urzytkownika| | | |:-------------------:|:--:|:--:| |id_uzytkownika<br/>int|id_trasy<br/>int|id_biletu<br/>int| --- #### Diagram E-R ```graphviz digraph summary digraph ER{ nodesep=0.5 # ranksep = 9; label="Diagram E-R" edge[arrowhead=no] node[shape=ellipse]; # sets of entities Taksowka[shape=box]; Wyspa[shape=box]; Polaczenie[style=dashed shape=box]; Trasa[style=dashed shape=box]; Rejs[style=dashed shape=box]; Bilet[shape=box]; Uzytkownik[shape=box]; # attributes of Taksówka TaxId[label=<<u>id_taksowki</u>>] TaxSeats[label="liczba_miejsc,\n int"] TaxOK[label="sprawna,\nbit,\nNOT NULL"] TaxAvailable[label="dostępna,\nbit,\n NOT NULL"] TaxId->Taksowka TaxSeats->Taksowka TaxOK->Taksowka TaxAvailable->Taksowka # attributes of Wyspa IslID[label=<<u>id_wyspy</u>>] IslName[label="nazwa_wyspy,\n text,\n NOT NULL"] IslID->Wyspa; IslName->Wyspa # attributes of Polaczenie ConId[label=<<u>id_polaczenia</u>>] ConIslA[label="wyspa_A,\n NOT NULL"] ConIslB[label="wyspa_B,\n NOT NULL"] ConTime[label="czas_przebycia\ntimestamp\nNOT NULL"] ConDist[label="odleglosc_pomiedzy\ndecimal\nNOT NULL"] ConId->Polaczenie ConIslA->Polaczenie ConIslB->Polaczenie ConTime->Polaczenie ConDist->Polaczenie # attributes of Trasa RouteId[label=<<u>id_trasy</u>> peripheries=2] RouteConId[label="id_polaczenia\nint\nNOT NULL"] RouteConSerial[label="nr_porzadkowy_polaczenia_w_trasie\nint\nNOT NULL" peripheries=2] RouteId->Trasa RouteConId->Trasa RouteConSerial->Trasa # attributes of Rejs CruId[label=<<u>id_rejsu</u>>] CruRouteId[label="id_trasy,\nint,\nNOT NULL"] CruTaxId[label="id_taksowki,\nint,\nNOT NULL"] CruDepTime[label="data_godzina_wypłynięcia\ntimestamp,\nNOT NULL"] CruSeats[style=dashed label="liczba_dostępnych_miejsc,\nint,\nNOT NULL"] CruPub[label="publiczny,\nbit\nNOT NULL"] CruOpen[label="otwarty,\nbit\nNOT NULL"] CruId->Rejs CruRouteId->Rejs CruTaxId->Rejs CruDepTime->Rejs CruSeats->Rejs CruPub->Rejs CruOpen->Rejs # attributes of Bilet TickId[label=<<u>id_biletu</u>>] TickCruId[style=dashed label="id_rejsu,\nint,\nNOT NULL"] TickName[label="imię_nazwisko,\ntext,\nNOT NULL"] TickSeats[label="liczba_osob,\nint,\nNOT NULL"] TickIslA[label="wyspa_poczatkowa,\nint,\nNOT NULL"] TickIslB[label="wyspa_koncowa,\nint,\nNOT NULL"] TickPrice[style=dashed label="cena,\ndecimal,\nNOT NULL"] TicketIsCruPrivate[label="prywatny_rejs,\nbit,\nNOT NULL"] TickId->Bilet TickCruId->Bilet TickName->Bilet TickSeats->Bilet TickIslA->Bilet TickIslB->Bilet TickPrice->Bilet TicketIsCruPrivate->Bilet # attributes of Uzytkownik UID[label=<<u>id_uzytkownika</u>>] Name[label="Imie i nazwisko,\ntext,\nNOT NULL"] Email[label="email,\ntext,\nNOT NULL"] Pass[label="password,\ntext,\nNOT NULL"] UID->Uzytkownik Name->Uzytkownik Email->Uzytkownik Pass->Uzytkownik Has[shape=diamond label="Ma"]; ConsistsOf[shape=diamond label="Składa się na"]; Has1[style=dashed shape=diamond label="Składa się na"]; IsOn1[style=dashed shape=diamond label="Jest Na"]; Has2[shape=diamond label="Ma"]; IsOn2[style=dashed shape=diamond label="Jest Na"]; Wyspa->Has[dir=back,arrowhead=normal] Has->Polaczenie[arrowhead=normal] Polaczenie->ConsistsOf[penwidth=3.0] ConsistsOf->Trasa[penwidth=3.0,arrowhead=normal] Trasa->Has1[penwidth=3.0] Has1->Rejs[penwidth=3.0,arrowhead=normal] Uzytkownik->Has2 Has2->Bilet[arrowhead=normal] Bilet->IsOn1[penwidth=3.0] IsOn1->Rejs[penwidth=3.0,arrowhead=normal] Taksowka -> IsOn2[penwidth=3.0,arrowhead=normal,dir=back] IsOn2 -> Rejs[penwidth=3.0] } ```