Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czy dobrze zaprojektowałem bazę danych? Prośba o opinie i wskazówki
Forum PHP.pl > Forum > Bazy danych > MySQL
tomzoll
Witam serdecznie.
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
  1. 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.
  1. prace(idprace(PK), godziny, typ_pracy, wprowadzil)
  2.  
  3. ADD CONSTRAINT `fk_uzytkownicy` FOREIGN KEY (`wprowadzil`) REFERENCES `uzytkownicy` (`id`) ON DELETE RESTRICT ON UPDATE NO ACTION,
  4. 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)
  1. rozliczenia(idpracy(PK),kwota)
  2.  
  3. 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.
  1. rozliczenia_pracownik(id(PK), nazwa_rozliczenia,id_pracownika)
  2.  
  3. 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
  1. rozliczenia_szczegoly(id(PK), id_rozliczenia, id_pracy)
  2.  
  3. ADD CONSTRAINT `fk_rozliczenia_pracownik` FOREIGN KEY (`id_rozliczenia`) REFERENCES `rozliczenia_pracownik` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION,
  4. 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
  1. koszty(id(PK), nazwa, kwota, id_rozliczenia)
  2. 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:
  1. stawki (id(PK), typ_pracy, wartosc)
  2.  
  3. 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.
  1. typy_prac (id(PK), typ)


Z góry dziękuję za pomoc.
Pozdrawiam
Tomek:)
mmmmmmm
Niepotrzebnie na rozliczenie masz osobną tabelę. Zwłaszcza, że jest tam tylko id_pracy i kwota. Lepiej umieścić kwotę bezpośrednio przy pracy. Ale to powoduje cały ciąg zależności...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.