-
Notifications
You must be signed in to change notification settings - Fork 0
Tietorakenteet
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)
);
- 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).
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
);
- 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ä.
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
);
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
);
- 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ä.
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
);
- 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.
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
}