---
# System prepended metadata

title: Untitled

---

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]
        
        
}
```

