PLProjektKompetencyjny / PK_6IO1z_Projekt4_DataBase

0 stars 0 forks source link

TravelNest Database

Uruchamianie kontenera bazy danych

image

Spis treści

  1. Struktura
    1. Wewnętrzna
      1. Rezerwacje
      2. Pokoje
      3. Klienci
      4. Faktury
      5. Użytkownicy
    2. Zewnętrzna
      1. Odniesienia
      2. Modyfikacja danych
        1. reservation_view
        2. room_view
        3. customer_view
        4. invoice_view
        5. user_view
        6. service_view

1. Struktura

1.1. Wewnętrzna

Struktura wewnętrzna bazy składa się z 7 tabel głównych i 4 tabel - słowników. Tabele główne są modelem, który opisuje fragment działalności hotelu, związany z realizowaniem rezerwacji przez klientów. Tabele słowniki są tabelami pomocniczymi, które przechowują statusy rekordów w poszczególnych modułach systemu bazy danych.

Tabele główne:

Tabele słowniki:

1.1.1 Rezerwacje

Na rezerwację składają się:

1.1.2 Pokoje

Na pokój składa się:

1.1.3 Klienci

Na profil klienta składa się:

1.1.4 Faktury

Na fakturę składa się:

1.1.5 Użytkownicy

Użytkownikiem jest zarówno administrator jak i osoba rezerwująca pokój. Administrator jest oznaczony specjalną flagą is_admin. Administrator nie musi mieć wypełnionych danych w tabeli user_details.

1.2. Zewnętrzna

Struktura zewnętrzna bazy danych (widziana przez Backend) składa się z 5 widoków, które można ze sobą łączyć.

1.2.1 Odniesienia


classDiagram
direction LR

class reservation_view {
    reservation_id
    customer_id
    reservation_room_id
    reservation_last_modified_by

    INSERT()
    UPDATE()
}

class room_view {
    room_id
    room_last_modified_by

    INSERT()
    UPDATE()
}

class customer_view {
    customer_id
    customer_last_modified_by

    INSERT()
    UPDATE()
}

class user_view {
    user_id
    user_last_modified_by

    insert_user_account() user_id
    update_user_account_password() user_id
    authenticate_user_account() user_id
    UPDATE()
}

class invoice_view {
    invoice_id
    invoice_reservation_id
    invoice_last_modified_by

    INSERT()
    UPDATE()
}

class service_view {
    reservation_id
    service_last_modified_by

    INSERT()
    UPDATE()
}

reservation_view <--> customer_view : (customer_id - customer_id)
reservation_view <--> room_view : (reservation_room_id - room_id)
reservation_view <--> user_view : (reservation_last_modified_by - user_id)
room_view <--> user_view : (room_last_modified_by - user_id)
customer_view <--> user_view : (customer_id - user_id)
customer_view <--> user_view : (customer_last_modified_by - user_id)
user_view <--> user_view  : (user_last_modified_by - user_id)
invoice_view <--> reservation_view: (invoice_reservation_id - reservation_id)
invoice_view <--> user_view : (user_last_modified_by - user_id)
service_view <--> reservation_view: (service_reservation_id - reservation_id)
service_view <--> user_view : (service_last_modified_by - user_id)

Podstawowe operacje jak aktualizowanie istniejących danych czy wprowadzanie nowych, realizuje się za pomocą standardowych instrukcji UPDATE czy INSERT. Wyjątkiem są operacje związane z user_view.

1.2.2 Modyfikacja danych

Tabele poniżej przedstawiają które pola widoków i jaką instrukcja można modyfikować.

Pole _last_modified_at nie można modyfikować, ponieważ jest ono odświeżane automatycznie podczas wykonywania innych operacji.

Pole _last_modified_by w każdej tabeli odnosi się do user_ID z widoku user_view.

Wszystkie pola z suffixem _id muszą zawierać wartości istniejące w tabelach powiązanych kluczem obcym, wszystkie odwołują się do pola o nazwie ID w tabelach jak poniżej.

Nazwa kolumny w widoku Widok Tabela Dostępne w widoku
reservation_customer_id reservation_view user_account customer_view
reservation_status_id reservation_view dict_reservation_status --
reservation_room_id reservation_view room --
reservation_room_status_id reservation_view dict_reservation_room_status --
room_type_id room_view room_type room_view
room_status_id room_view dict_room_status --
customer_id customer_view user_account customer_view
invoice_status_id invoice_view dict_invoice_status --
invoice_reservation_id invoice_view reservation reservation_view
service_reservation_id service_view reservation reservation_view

1.2.2.1 reservation_view

Nazwa kolumny w widoku UPDATE INSERT
reservation_id
reservation_customer_id X
reservation_status_id X
reservation_number_of_adults X X
reservation_number_of_children X X
reservation_start_date X X
reservation_end_date X X
reservation_room_id X X
reservation_room_status_id X
reservation_last_modified_by X X
reservation_last_modified_at

1.2.2.2 room_view

Nazwa kolumny w widoku UPDATE INSERT
room_id X
room_type_id X X
room_status_id X
room_number_of_single_beds
room_number_of_double_beds
room_number_of_child_beds
room_gross_price X X
room_gross_price_adult
room_gross_price_child
room_photos_dir
room_last_modified_by X X
room_last_modified_at

1.2.2.3 customer_view

Nazwa kolumny w widoku UPDATE INSERT
customer_id X
customer_nip_number X X
customer_name X X
customer_surname X X
customer_email
customer_phone X X
customer_city X X
customer_postal_code X X
customer_street X X
customer_building_number X X
customer_last_modified_by X X
customer_last_modified_at

1.2.2.4 invoice_view

Nazwa kolumny w widoku UPDATE INSERT
invoice_id
invoice_reservation_id X
invoice_date
invoice_price_gross X X
invoice_is_paid X
invoice_status_id X
user_last_modified_by X
user_last_modified_at

1.2.2.5 user_view

Nazwa kolumny w widoku UPDATE INSERT
user_id
user_e_mail X
user_name X
user_is_active X
user_is_admin X
user_last_modified_by X
user_last_modified_at

Poniższe operacje nie są możliwe do wykonania przy użyciu instrukcji UPDATE czy INSERT.

1.2.2.6 service_view

Nazwa kolumny w widoku UPDATE INSERT
service_id
service_name X X
service_price X X
service_reservation_id X
service_quantity X X
service_last_modified_by X
service_last_modified_at