Skip to content

This project presents an imaginary travel agency database, with synthetic data generated using the Python Faker library. The dataset is stored in a relational database (MariaDB) and analyzed using Python with libraries such as pandas, matplotlib

Notifications You must be signed in to change notification settings

Paulinaaa0504/SQL_database_project

Repository files navigation

Dokumentacja projektu

Spis użytych technologii

  1. Języki programowania

    • Python: Wykorzystany do przetwarzania danych, obsługi bazy danych, generowania raportów oraz tworzenia wykresów i przeprowadzenia analizy.
    • SQL: Używany do komunikacji z bazą danych, dodania informacji do bazy, tworzenia zapytań i manipulacji danymi.
  2. Baza danych

    • MariaDB: Wykorzystana jako system zarządzania bazą danych (DBMS) do przechowywania danych o klientach, wycieczkach, pracownikach i kosztach.
  3. Biblioteki w Pythonie

    • mysql.connector: Używana do komunikacji z bazą danych MySQL.
    • pandas: Używana do manipulacji danymi (przeszukiwanie, agregowanie) oraz do tworzenia struktury danych (DataFrame).
    • matplotlib: Używana do generowania wykresów i wizualizacji danych w postaci wykresów słupkowych, kołowych i liniowych.
    • faker: Używana do generowania fikcyjnych danych, takich jak imiona, nazwiska, adresy i telefony, co pozwoliło na łatwe zapełnienie bazy danych.
    • datetime: Używana do pracy z datami i czasem.
    • numpy: Używana do obliczeń numerycznych, szczególnie przy pracy z danymi tabelarycznymi.
    • random: Używana do generowania losowych wartości.
    • unicodedata: Używana do normalizacji znaków Unicode (usuwania akcentów z liter).
  4. Środowisko

    • VS Code: Używane do edycji kodu w pracy z Pythonem i SQL.
  5. Narzędzia do zarządzania wersjami

    • Git: Używane do zarządzania kodem i wersjami projektu oraz wspólnej pracy nad projektem.
    • GitHub: Używane do przechowywania kodu w chmurze.
  6. Inne narzędzia

    • Markdown: Używane do dokumentowania projektu w formacie .md.

Lista plików i opis ich zawartości

  1. tworzenie_tabel.sql Skrypt SQL zawierający schemat bazy danych, w tym definicje tabel i zależności między nimi.

  2. schemat_bazy.png Graficzny schemat bazy danych.

  3. wprowadzenie_danych.ipynb Jupyter Notebook zawierający skrypty do łączenia się z bazą danych w Pythonie i dodawania danych do bazy.

  4. analiza_danych.ipynb Jupyter Notebook zawierający kod do analizy danych i generowania wykresów. Skrypt wykonuje zapytania SQL, przetwarza dane przy użyciu Pandas oraz wizualizuje wyniki.

  5. analiza_danych.pdf Plik pdf z pliku Jupyter Notebook z analizą danych.

  6. README.md Dokumentacja projektu, zawierająca instrukcje dotyczące projektu.

Kolejność i sposób uruchamiania plików, aby uzyskać gotowy projekt

  1. Połącz się z serwerem bazy: Połącz się z bazą na serwerze kursu używając danych do logowania:
    login: team18
    hasło: te@mzaib
    baza: team18

  2. Utwórz tabele w bazie danych: Uruchom skrypt tworzenie_tabel.sql w swoim środowisku bazodanowym, aby utworzyć odpowiednie tabele do projektu.

  3. Uruchom pierwszy plik Jupyter Notebook (wprowadzenie_danych.ipynb): Skrypt ten łączy się z bazą danych i pozwala na dodanie wybranej przez siebie liczby danych.

  4. Uruchom drugi plik Jupyter Notebook (analiza_danych.ipynb): Przeanalizuj zebrane dane przy użyciu Pandas i Matplotlib. Skrypt wyświetli odpowiednie wykresy i dane w celu przeprowadzenia analizy.

Schemat projektu bazy danych

Schemat Bazy Danych

Zależności funkcyjne dla relacji

Tabela panstwa
panstwo_id nazwa

Każdemu unikalnemu panstwo_id przypisana jest nazwa państwa.

Tabela miasta
miasto_id nazwa panstwo_id

Każdemu unikalnemu miasto_id przypisana jest nazwa miasta oraz panstwo_id (odwołanie do tabeli panstwa).

Tabela adresy
adres_id adres miasto_id

Każdemu unikalnemu adres_id przypisane są dane o adresie oraz miasto_id (odwołanie do tabeli miasta).

Tabela klienci
klient_id imie nazwisko telefon email adres_id data_urodzenia numer_paszportu

Każdemu unikalnemu klient_id przypisane są dane o kliencie: imię, nazwisko, telefon, email, adres_id (odwołanie do tabeli adresy), data urodzenia oraz numer paszportu.

Tabela bliscy
bliski_id klient_id imie nazwisko telefon email

Każdemu unikalnemu bliski_id przypisane są dane o bliskim: klient_id (odwołanie do tabeli klienci), imię, nazwisko, telefon oraz email.

Tabela stanowiska
stanowisko_id nazwa

Każdemu unikalnemu stanowisko_id przypisana jest nazwa stanowiska.

Tabela pracownicy
pracownik_id imie nazwisko stanowisko_id telefon email

Każdemu unikalnemu pracownik_id przypisane są dane o pracowniku: imię, nazwisko, stanowisko_id (odwołanie do tabeli stanowiska), telefon oraz email.

Tabela wyplaty
wyplata_id pracownik_id kwota data_wyplaty

Każdemu unikalnemu wyplata_id przypisane są dane o wypłacie: pracownik_id (odwołanie do tabeli pracownicy), kwota oraz data wypłaty.

Tabela rodzaje_wycieczek
rodzaj_id nazwa

Każdemu unikalnemu rodzaj_id przypisana jest nazwa rodzaju wycieczki.

Tabela wycieczki
wycieczka_id nazwa kierunek opis rodzaj_id czas_trwania liczba_uczestników krajowa

Każdemu unikalnemu wycieczka_id przypisane są dane o wycieczce: nazwa, kierunek, opis, rodzaj_id (odwołanie do tabeli rodzaje_wycieczek), czas trwania, liczba uczestników oraz informacja, czy wycieczka jest krajowa.

Tabela zrealizowane_wyjazdy
wyjazd_id wycieczka_id data_rozpoczęcia data_zakończenia liczba_uczestników

Każdemu unikalnemu wyjazd_id przypisane są dane o zrealizowanym wyjeździe: wycieczka_id (odwołanie do tabeli wycieczki), data rozpoczęcia, data zakończenia oraz liczba uczestników.

Tabela koszty_wycieczek_2022
koszt_id wycieczka_id cena_przejazd cena_nocleg cena_ubezpieczenie cena_organizacja

Każdemu unikalnemu koszt_id przypisane są dane o kosztach wycieczki: wycieczka_id (odwołanie do tabeli wycieczki), cena przejazdu, cena noclegu, cena ubezpieczenia oraz cena organizacji.

Tabela koszty_wycieczek_2023
koszt_id wycieczka_id cena_przejazd cena_nocleg cena_ubezpieczenie cena_organizacja

Każdemu unikalnemu koszt_id przypisane są dane o kosztach wycieczki: wycieczka_id (odwołanie do tabeli wycieczki), cena przejazdu, cena noclegu, cena ubezpieczenia oraz cena organizacji.

Tabela koszty_wycieczek_2024
koszt_id wycieczka_id cena_przejazd cena_nocleg cena_ubezpieczenie cena_organizacja

Każdemu unikalnemu koszt_id przypisane są dane o kosztach wycieczki: wycieczka_id (odwołanie do tabeli wycieczki), cena przejazdu, cena noclegu, cena ubezpieczenia oraz cena organizacji.

Uzasadnienie, że baza jest w EKNF

Baza danych została zaprojektowana zgodnie z zasadami Elementary Key Normal Form (EKNF), co oznacza, że:

  1. Jednoznaczne klucze podstawowe – Każda tabela posiada jednoznaczny klucz podstawowy (np. panstwo_id, miasto_id, klient_id), który pozwala na jednoznaczną identyfikację każdego rekordu. Klucze podstawowe są minimalne, zawierają tylko te kolumny, które są niezbędne do identyfikacji danych.

  2. Brak zbędnej redundancji – W tabelach unikamy przechowywania powtarzających się informacji.

    • W tabeli pracownicy przechowywane są jedynie dane dotyczące pracowników, a szczegóły dotyczące ich stanowisk są zapisane w osobnej tabeli stanowiska, dzięki czemu nie powtarzamy informacji o stanowisku w każdym rekordzie pracownika.
  3. Zależności funkcyjne – Atrybuty tabel są zależne od swoich kluczy podstawowych.

    • W tabeli koszty_wycieczek_2022 wartości takie jak cena_przejazd, cena_nocleg, cena_ubezpieczenie są zależne od klucza wycieczka_id.
  4. Ograniczenie zależności nielogicznych – W tabelach nie występują zależności, które byłyby niepotrzebne lub trudne do uzasadnienia.

    • Na przykład, tabela bliscy przechowuje dane tylko dotyczące bliskich klientów, nie powiela informacji o samych klientach.
  5. Podział danych na logiczne grupy – W bazie danych zastosowano odpowiedni podział danych.

    • Podział na tabele takie jak panstwa, miasta i adresy, które przechowują różne dane, zapewniając spójność i unikanie redundancji.

Opis trudności napotkanych w projekcie

  1. Dodanie danych do tabel: Trudności związane z utworzeniem realistycznych danych i wprowadzeniem ich do tabel.

  2. Optymalizacja zapytań SQL: Trudności przy optymalizacji zapytań do bazy danych, zwłaszcza podczas łączenia wielu tabel i agregowania danych.

About

This project presents an imaginary travel agency database, with synthetic data generated using the Python Faker library. The dataset is stored in a relational database (MariaDB) and analyzed using Python with libraries such as pandas, matplotlib

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published