Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Czy dobrze zaprojektowałem bazę danych? Prośba o opinie i wskazówki
tomzoll
post 7.11.2014, 08:29:40
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 19.09.2011

Ostrzeżenie: (0%)
-----


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:)
Go to the top of the page
+Quote Post
mmmmmmm
post 7.11.2014, 12:09:07
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.06.2025 - 00:19