Skip to content

Tietorakenteet

Kimmo Muli edited this page Apr 20, 2023 · 4 revisions

Tietorakenteet

Vapaat Varausikkunat (Timeslots)

Sisältää aikavälin aloitusajan, loppuajan, aikavälin tyypin, ryhmän, lisätiedot sekä viitteen lentokenttään, johon aikaväli liittyy.

CREATE TABLE timeslots (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    start DATETIME NOT NULL,
    end DATETIME NOT NULL,
    type VARCHAR(255) NOT NULL DEFAULT 'available',
    group VARCHAR(255) DEFAULT NULL,
    info VARCHAR(255) DEFAULT NULL,
    airfieldCode VARCHAR(255) NOT NULL,
    FOREIGN KEY (airfieldCode) REFERENCES airfields (code)
);

Huomioita

  • Aikavälille on määritelty sekä alkamis- että loppumisaika
  • Varausikkunan tyyppi kertoo, onko aikaväli vapaata aikaa (oletusarvoisesti "available") vai jotain muuta (tällä hetkellä toinen vaihtoehto on "blocked").
  • Ryhmä (group) kertoo onko aikaväleille toistuvuus, jos on se yhdistää kaikki toistuvuuden varausikkunat toisiinsa.
  • Aikaväliin liittyvät varaukset käsitellään erillisessä Ajanvaraukset taulussa (Reservation).

Ajanvaraukset (Reservations)

Sisältää varauksen tunnisteluvun, alku- ja loppuajan, lentokoneen ID:n, lisätiedot, puhelinnumeron sekä viitteen aikaväliin (Timeslot). Sisältää myös luomispäivän ja viimeisimmän muokkauspäivän.

CREATE TABLE reservations (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    start DATETIME NOT NULL,
    end DATETIME NOT NULL,
    aircraftId VARCHAR(255) NOT NULL,
    info TEXT,
    phone VARCHAR(255) NOT NULL,
    timeslot_id INTEGER,
    FOREIGN KEY(timeslot_id) REFERENCES timeslots (id),
    created_at DATETIME,
    updated_at DATETIME
);

Huomioita

  • Varaukselle on määritelty sekä alku- että loppuaika.
  • Varaukselle voidaan määritellä valinnaiset lisätiedot, jotka voivat sisältää lisäselvityksiä varaukseen liittyen.
  • Varaukselle on määritelty puhelinnumero, joka on yhteyshenkilön puhelinnumero.
  • Varaukseen liittyvä varausikkunat (Timeslot) käsitellään erillisessä taulussa, ja varauksella on viite siihen.
  • Tietokanta ei ota kantaa onko varaus varausikkunan "sisällä", eli onko olemassa varausikkuna, johon on mahdollista tehdä varaus. Tämä tarkistetaan ohjelmallisesti backendissä.

Käyttäjät (Users)

Sisältää käyttäjän tunnisteluvun, käyttäjänimen, nimen, roolin (esim. Lentäjä, Lennonjohtaja tai Ylläpitäjä), sähköpostiosoitteen sekä puhelinnumeron. Sisältää myös luomispäivän ja viimeisimmän muokkauspäivän.

CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username VARCHAR(255) UNIQUE NOT NULL,
    name VARCHAR(255) NOT NULL,
    role VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL,
    phone VARCHAR(255) NOT NULL,
    created_at DATETIME,
    updated_at DATETIME
);

Lentokentät (Airfields)

Sisältää lentokentän koodin, nimen, samanaikaisten lentojen maksimimäärän sekä tapahtumien aikavälien granulaarisuuden minuutteina. Sisältää lentokentän tunnisteluvun sekä nimen.

CREATE TABLE airfields (
    code VARCHAR(255) PRIMARY KEY,
    name VARCHAR(255) UNIQUE NOT NULL,
    maxConcurrentFlights INTEGER NOT NULL,
    eventGranularityMinutes INTEGER NOT NULL
);

Huomioita

  • Lentokentän koodi on yksilöllinen ja toimii myös ensisijaisena avaimena.
  • Samanaikaisten lentojen maksimimäärä määrittelee, kuinka monta lentoa voi olla käynnissä samanaikaisesti kyseisellä lentokentällä.
  • Tapahtumien aikavälien granulaarisuus minuutteina määrittelee, kuinka pienissä aikaväleissä tapahtumat ja varaukset voidaan tehdä kyseisellä lentokentällä.

Konfiguraatio (Configuration)

Sisältää konfiguraation tunnisteluvun, päivien määrän ennen aloitusta sekä maksimipäivien määrän tulevaisuudessa.

CREATE TABLE configuration (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    daysToStart INTEGER NOT NULL,
    maxDaysInFuture INTEGER NOT NULL,
    created_at DATETIME,
    updated_at DATETIME
);

Huomioita

  • Päivien määrä ennen aloitusta (daysToStart) määrittelee, kuinka monta päivää ennen aloituspäivää konfiguraatio on voimassa.
  • Maksimipäivien määrä tulevaisuudessa (maxDaysInFuture) määrittelee, kuinka kauas tulevaisuuteen konfiguraatio voi ulottua.
  • Luomis- ja muokkauspäivämäärät tallennetaan automaattisesti tietokantaan.

Tietokantakaavio

classDiagram
    Airfield "1" -- "*" Timeslot
    Timeslot "*" -- "0..1" Reservation
    Reservation "*" -- "1" User
    Airfield "1" -- "*" Reservation

    class Airfield{
        code: string
        name: string
        maxConcurrentFlights: integer
        eventGranularityMinutes: integer
    }
    class Timeslot{
        id: integer
        start: datetime
        end: datetime
        type: string
        group: string
        info: string
        (fk) airfieldCode: string
    }
    class Reservation{
        id: integer
        start: datetime
        end: datetime
        aircraftId: string
        info: text
        phone: string
        (fk) timeslot_id: integer
        created_at: datetime
        updated_at: datetime
    }
    class User{
        id: integer
        username: string
        name: string
        role: string
        email: string
        phone: string
        created_at: datetime
        updated_at: datetime
    }
    class Configuration{
        id: integer
        daysToStart: integer
        maxDaysInFuture: integer
        created_at: datetime
        updated_at: datetime
    }
Loading