Zwracam się z prośbą o analizę, czy dobrze zaprojektowałem bazę danych i czy dobrze logiczne zaprojektowałem działanie programu. Baza dotyczy programu do wprowadzania prac przez pracowników oreaz ich rozliczania. Poniżej pokrótce przedstawiam tabele, jakie mam w bazie:
Tabele:
1. Tabela użytkowników: w tej tabeli przechowywane są informacje na temat użytkowników
uzytkownicy(id(PK), imie, nazwisko, email(UNIQUE), haslo)
2. Tabela wykonanych prac przez użytkowników: do tej tabeli użytkownicy wprowadzają przepracowane przez siebie prace, tj. ilość przepracowanych godzin oraz wybierają z listy typ wykonanej pracy.
prace(idprace(PK), godziny, typ_pracy, wprowadzil) ADD CONSTRAINT `fk_uzytkownicy` FOREIGN KEY (`wprowadzil`) REFERENCES `uzytkownicy` (`id`) ON DELETE RESTRICT ON UPDATE NO ACTION, ADD CONSTRAINT `fk_typy_prac` FOREIGN KEY (`typ_pracy`) REFERENCES `typy_prac` (`id`) ON DELETE RESTRICT ON UPDATE NO ACTION,
3. Tabela rozliczeń, w której przechowywane są informację kwotowe, na temat danej przepracowanej pracy: w tej tabeli, po dodaniu pracy przez użytkownika, uruchamiana jest funkcja, która zapisuję id wprowadzonej pracy oraz kwotę należną za pracę. Kwota jest obliczana w ten sposób, że jest funkcja, która mnoży ilość godzin z tabeli prace* stawkę za dany typ pracy (tabela stawki i typy_prac)
rozliczenia(idpracy(PK),kwota) ADD CONSTRAINT `fk_prace` FOREIGN KEY (`idpracy`) REFERENCES `prace` (`idprace`) ON DELETE CASCADE ON UPDATE NO ACTION;
4. Tabela rozliczeń dla pracowników za danych okres, tj. miesiąc rok: np. nazwa_rozliczenia ma wartość: Jan Kowalski - 2014 -10.
rozliczenia_pracownik(id(PK), nazwa_rozliczenia,id_pracownika) ADD CONSTRAINT `pracownicy` FOREIGN KEY (`id_pracownika`) REFERENCES `uzytkownicy` (`id`) ON DELETE RESTRICT ON UPDATE NO ACTION;
5. Tabela szczegółów rozliczeń pracowników, tj. informacje, do którego rozliczenia pracownika przypisana jest jaka praca, tj. powiązane jest rozliczenie - tabela 4 i wprowadzona praca - tabela 2
rozliczenia_szczegoly(id(PK), id_rozliczenia, id_pracy) ADD CONSTRAINT `fk_rozliczenia_pracownik` FOREIGN KEY (`id_rozliczenia`) REFERENCES `rozliczenia_pracownik` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION, ADD CONSTRAINT `fk_rozliczenia_prace` FOREIGN KEY (`id_pracy`) REFERENCES `prace` (`idprace`) ON DELETE CASCADE ON UPDATE NO ACTION;
6. Tabela kosztów, które pracownik poniósł w powiązaniu z danym rozliczeniem pracownika - tak, aby pomniejszyć mu wypłatę za dane rozliczenie pracownika
koszty(id(PK), nazwa, kwota, id_rozliczenia) ADD CONSTRAINT `fk_rozliczenia` FOREIGN KEY (`id_rozliczenia`) REFERENCES `rozliczenia_pracownik` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
7. Tabela stawek pieniężnych za godzinę danej pracy, w zależności od jej typu:
stawki (id(PK), typ_pracy, wartosc) ADD CONSTRAINT `fk_typy_prac` FOREIGN KEY (`typ_pracy`) REFERENCES `typy_prac` (`id`) ON DELETE RESTRICT ON UPDATE NO ACTION,
8. Tabela typów prac, które pracownik może wykonywać, np. pranie, sprzątanie, gotowanie itp.
typy_prac (id(PK), typ)
Z góry dziękuję za pomoc.
Pozdrawiam
Tomek:)