Bazę tworzymy i wypełniamy skryptowo.
Przed przystąpieniem do dalszych części należy przejść do pliku user_manual.md i zrealizować zawarte w niej polecenia.
- analiza potrzebnych danych
- na zasadzie burzy mózgów i researchu
- utworzenie potrzebnego schematu za pomocą narzędzia
dbdiagram.io
- wygenerowanie potrzebnych tabel przu użyciu
main.py, SQLowy kod znajduje się wdb_schema/db_creation.sql
-
wygenerowanie cząstkowej bazy użytkownikow Facebooka
- oczyszczenie bazy
- zrandomizowanie wartości (imiona, nazwiska, numery tel, pochodzenie)
- zapisanie do
data/users_randomized.csvprzy pomocypython pandas
-
zapisanie typowych leków, sprzętów itd do plików
.xlsxi.csv -
tworzenie bazy przy użyciu
main.py -
uzupełnianie bazy przy użyciu
main.py(kod znajduje się wtables_fulfill.py)-
employees
- pracownicy
- księgowa
- recepcjonistka
- szef
- 3 weterynarzy
- osoba sprzątająca
- zarobki - na podstawie strony wynagrodzenia.pl
- imiona i nazwiska na podstawie zrandomizowanych wartości z bazy użytkowników Facebooka
- pracownicy
-
rooms
-
gabinety weterynarzy
-
gabinet zabiegowy
-
recepcja
-
pomieszczenie socjalne
-
zaplecze
-
-
equipment
-
lista, z której bierzemy informacje znajduje się w pliku
meds.xlsx -
wygenerowano losowo dane liczbowe
-
pomieszczenie na podstawie informacji o pomieszczeniach
-
-
meds
- lista, z której bierzemy informacje znajduje się w pliku
drugs.csv - wygenerowane losowo dane liczbowe
- lista, z której bierzemy informacje znajduje się w pliku
-
owners
- losowanie z zakresu, każdemu przypisujemy od 1 do kilku zwierząt wg prawdopodobiństwa
-
pets
-
psy: regresja liniowa na podstawie pliku
dogs.xlsx -
waga, wzrost oraz czas życia wszystkich zwierząt na podstawie informacji dostępnych w internecie
-
wygenerowana losowo data urodzenia
-
-
visits
-
po 20 dziennie, część odwołana, wg prawdopodobieństwa
-
za odwołaną wizytę płaci się opłatę manipulacyjną w wysokośći 50pln
-
przypisanie zwierzęcia do lekarza prowadzącego
-
-
meds_prescribed
- na podstawie wizyty
-
cash flow
- na podstawie wizyt i pracowników
-
-
przykładowe wyniki, dla poszczególnych tabel, przy użyciu zapytania:
SELECT * FROM `nazwa_tabeli` LIMIT 10
-
employees
- rooms
- equipment
- meds
- owners
- pets
- visits
- meds prescribed
- cash flow
- wykres przedstawiający liczbę wizyt każdego dnia.
- wykres przedstawiający bilans zysków i strat kliniki.
- lista zwierzaków najdłużej czekających na wizytę.
- rozkład wagi zwierząt
- zarobki lekarzy w stosunku do liczby wizyt
- najczęściej przypisywane leki
- procentowy podział strat
Po wypełnieniu poleceń z user_manual.md (czyli też uruchomieniu main.py) powinien pojawić się plik analiza.html,
czyli raport.
-
spis użytych technologii
-
Pycharm 2020.1.3
-
dbdiagram.io
-
Windows 10
-
MariaDB server 10.5
-
Python 3.9 z paczkami z pliku
requirements.txt
-
-
lista plików i ich zawartości
-
analiza.html-> plik z analizą z#3i#4w formie.html -
main.py-> skypt generujący i wypełniający bazę oraz tworzący raport -
user_manual.md-> instrukcja inicjacyjna -
requirements.txt-> potrzebne pythonowe paczki -
README.md-> sprawozdanie z całości projektu -
data
dogs.xlsx-> informacje o psachdrugs.csv-> informacje o lekachusers_randomized-> zrandomizowana baza danych osobowych
-
db_schema
db_creation.sql-> kod tworzacy bazę danychschema.vuerd.json-> schemat bazy danych
-
final_code
schema_creaction.py-> plik zawierający funkcje potrzebne do połączenia z bazątables_fulfill.py-> plik zawierający funkcje potrzebne do wypełnienia bazyreport-> folder zawierający wykresy do raportu
-
generate
- pliki z różnymi danymi dotyczącymi klinik weterynaryjnych
- zarobki, zwierzęta, proste regresji, medykamenty, itd.
- pliki z różnymi danymi dotyczącymi klinik weterynaryjnych
-
resources
- notebooki do czyszczenia danych, wersje testowe, obrazki do
README.md, itd.
- notebooki do czyszczenia danych, wersje testowe, obrazki do
-
-
kolejność i sposób uruchamiania plików, aby uzyskać gotowy projekt
- znajduje się w
user_manual.md
- znajduje się w
-
schemat projektu bazy danych
- znajduje się w na początku
README.md(część#1)
- znajduje się w na początku
-
dla każdej relacji listę zależności funkcyjnych z wyjaśnieniem
- meds
- klucze kandydujące:
drugID,name - klucz główny:
drugID - zależności funkcyjne: trywialne (np.
ordered->ordered),drugID-> pozostałe pozdbiory atrybutów relacji,name-> pozostałe podzbiory atrybutów relacji - komentarz:
drugIDjest oczywiście unikatowym kluczem głównym.namejest unikatowym atrybutem. w naszej bazie danych leki określamy jako substancje czynne - stąd każda wartość jest unikatowa.
- klucze kandydujące:
- meds_prescribed
- klucze kandydujące:
(drugID, name)<- klucz kompozytowy - klucz główny:
(drugID, name) - zależności funkcyjne: trywialne,
(drugID, name)-> pozostałe pozdbiory atrybutów relacji - komenatarz: klucz główny jest kluczem kompozytowym, gdyż w ciągu jednej wizyty możemy przypisać wiele leków, a jeden lek może być przypisany wielu wizytom
- klucze kandydujące:
- employees
- klucze kandydujące:
employeeID - klucz główny:
employeeID - zależności funkcyjne: trywialne,
employeeID-> pozostałe pozdbiory atrybutów relacji - komenatarz: klucz główny relacji jest atrybutem unikatowym
- klucze kandydujące:
- pets
- klucze kandydujące:
petID - klucz główny:
petID - zależności funkcyjne: trywialne,
petID-> pozostałe pozdbiory atrybutów relacji - komenatarz: klucz główny relacji jest atrybutem unikatowym
- klucze kandydujące:
- owners
- klucze kandydujące:
ownerID - klucz główny:
ownerID - zależności funkcyjne: trywialne,
ownerID-> pozostałe pozdbiory atrybutów relacji - komenatarz: klucz główny relacji jest atrybutem unikatowym. adres email i numer telefonu nie są unikatowe, ponież są to tylko dane kontektowe, wartości te nie są wykorzystywane do logowania do systemu. przykładowo mąż i żona mogą posiadać ten sam numer telefonu (domowy) oraz podać tę samą skrzynkę mailową.
- klucze kandydujące:
- rooms
- klucze kandydujące:
roomID,number - klucz główny:
roomID - zależności funkcyjne: trywialne,
roomID-> pozostałe pozdbiory atrybutów relacji,number-> pozostałe pozdbiory atrybutów relacji - komenatarz: klucz główny relacji jest atrybutem unikatowym. każdy pokój posiada swój unikatowy numer (unikoatowy w ramach kliniki). nie użyliśmy numeru pokoju jako klucza głównego, ponieważ czasami numery pokojów zostają zmienione, a zmienienie kluczy głównych w całej bazie danych jest bardzo niepożądaną operacją.
- klucze kandydujące:
- equipment
- klucze kandydujące:
eqID,(eqName, roomID, status) - klucz główny:
eqID - zależności funkcyjne: trywialne,
eqID-> pozostałe pozdbiory atrybutów relacji,(eqName, roomID, status)-> pozostałe podzbiory atrybutów relacji - komenatarz: klucz główny relacji jest atrybutem unikatowym. drugi z kluczy kandydujących również jednoznacznie identyfikuje krotkę.
- klucze kandydujące:
- visits
- klucze kandydujące:
visitID - klucz główny:
visitID - zależności funkcyjne: trywialne,
visitID-> pozostałe pozdbiory atrybutów relacji - komenatarz: klucz główny relacji jest atrybutem unikatowym
- klucze kandydujące:
- cash_flow
- klucze kandydujące:
cfid - klucz główny:
cfid - zależności funkcyjne: trywialne,
cfid-> pozostałe pozdbiory atrybutów relacji - komenatarz: klucz główny relacji jest atrybutem unikatowym
- klucze kandydujące:
- meds
-
uzasadnienie, że baza jest w EKNF
- jak wykazaliśmy w poprzednim podpunkcie, każda nietrywialna zależność funkcyjna albo zaczyna się od nadklucza albo kończy się atrybutem elementarnym. Oznacza to, że baza jest w EKNF.
-
opis, co było najtrudniejsze podczas realizacji projektu
- uzasadnienie, że baza jest w EKNF - musieliśmy zmienić nieco sam schemat bazy, by baza taka się stała.
- wyeliminowanie problemów technicznych związanych z generowaniem skryptowym i wypełnianiem bazy










