Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] Projket/budowa bazy danych, Baza przechowująca informacje o wyjazdach służbowych pracowników
osa2t
post
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 29.07.2009

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


Witam,

Chce napisać prosty program do przechowywania informacji o wyjazdach służbowych. Nie jestem dobry w projektowaniu baz dlatego proszę o pomoc by napisąc program najbardziej optymalny. Myślałem o czymś takim:
Jedna tabela przechowuje informacje o pracownikach (ID – pracownika, imię, nazwisko, dział w którym pracuje)
Druga tabela przechowuje informacje o miastach (ID- miasta, nazwa miasta, kod-pocztowy)
Trzecia tabela zawiera informacje o datach, kto, kiedy i gdzie wyjechał.
Proszę o pomoc czy dobrze myślę nad tym rozwiązaniem. Jeżeli nie to co jest złe w moim założeniu, czego brakuje co ewentualnie dodać. Jeżeli pomysł jest dobry bo proszę o pomoc w budowaniu bazy.
Go to the top of the page
+Quote Post
vokiel
post
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Tabela 1 - jak najbardziej tak jak podałeś - info o pracownikach

Tabela 2 - jeśli pracownicy wyjeżdzają ciągle do tych samych miejsc, to może mieć sens, jeśli natomiast delegacje są losowe, to możesz to zawrzeć w tabeli delegacji (Tabeli 3)

Tabela 3 - delegacje - kto? gdzie? kiedy? jak? dlaczego? no i po co?

Ważnym jest przy takim projektowaniu poświęcenie chwili na określenie wymagań systemu. Jakie informacje będą potrzebne, z jakich będzie się najczęściej korzystać. Po jakich kluczach będzie następowało wyszukiwanie, grupowanie. Jakie są zadania takiego systemu.

Bo chociażby: w systemie ma być opcja sporządzenia statystyk popularności miejsc delegacji. W takim przypadku lepiej utworzyć oddzielną tabelę na miejsca delegacji, z dodatkowym polem: VISITED, które to pole będzie przechowywało ilość odwiedzin (każda delegacja +1)
Jeśli system ma liczyć czas spędzony na delegacjach (poza tylko ich ilością), należałoby stowrzyć 2 kolumny na daty - wyjazdu i powrotu.

I tak dalej. Przede wszystkim założenia, wymagania - potem projekt tabel.

Pozdrawiam


--------------------
Go to the top of the page
+Quote Post
osa2t
post
Post #3





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 29.07.2009

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


witam,

dzięki za wypowiedz. Wymagania nie są narzucone. Ma to być raczej prosta aplikacja dla nauki zrobienia ciekawej i dobre bazy. Fajnie że się wypowiedziałeś bo sam nie pomyślałem o kolumnie czas wyjazdu – czas powrotu. Jeżeli masz jeszcze jakieś pomysły co można/trzeba by jeszcze dołożyć proszę o wypowiedz. Przy okazji znasz może jakiś manual na temat jak tworzyć projekty bazy?
Go to the top of the page
+Quote Post
vokiel
post
Post #4





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Cytat(osa2t @ 27.08.2009, 23:47:03 ) *
Przy okazji znasz może jakiś manual na temat jak tworzyć projekty bazy?
Moim jedynym manualem w tej kwestii było myślenie winksmiley.jpg z czasem doświadczenie.

Jeśli nie masz z góry określonych wymagań, to sam je stwórz. Spójrz na to ze strony finalnego użytkownika (operatora systemu). Jakie funkcje będą potrzebne, czego oczekujesz od tego systemu, jak miałyby wyglądać formularze, etc...

możesz zernkąć tutaj

Do samego projektowania bazy możesz sobie pomóc używając graficznych narzędzi jak np.: MySQL Workbench.


--------------------
Go to the top of the page
+Quote Post
osa2t
post
Post #5





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 29.07.2009

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


Witam,
Proszę o wypowiedz czy taki projekt bazy jest poprawny. Postawiłem na 3 tabele (pracownik, dział, delegacje). Czekam na opinie co warto zmienić a może takie założenie jest dobre.


  1. CREATE TABLE pracownik (
  2. id_pracownik INT(1000) NOT NULL AUTO_INCREMENT,
  3. id_dzial INT(100) NOT NULL AUTO_INCREMENT,
  4. imie VARCHAR(20) NOT NULL,
  5. nazwisko VARCHAR(20) NOT NULL,
  6. telefon INT(10) NOT NULL,
  7. data_dodania DATETIME NOT NULL,
  8. PRIMARY KEY( id_pracownik),
  9. KEY pracownik(nazwisko),
  10. KEY dzial(id_dzial)
  11. )type=MyISAM;
  12.  
  13. CREATE TABLE dzial (
  14. id_dzial INT(100) NOT NULL AUTO_INCREMENT,
  15. nazwa_dzialu VARCHAR(50) NOT NULL,
  16. data_dodania DATETIME NOT NULL,
  17. data_edycji DATETIME,
  18. PRIMARY KEY( id_dzial)
  19. )type=MyISAM;
  20.  
  21. CREATE TABLE delegacje (
  22. id_delegacji MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
  23. id_pracownik INT(1000) NOT NULL AUTO_INCREMENT,
  24. miasto VARCHAR(50) NOT NULL,
  25. cel VARCHAR(50) NOT NULL,
  26. data_wyjazdu DATETIME NOT NULL,
  27. data_przyjazdu DATETIME NOT NULL,
  28. data_edycji DATETIME,
  29. PRIMARY KEY( id_delegacji,id_pracownik)
  30. )type=MyISAM;
Go to the top of the page
+Quote Post
askone
post
Post #6





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Cytat
  1. CREATE TABLE pracownik (
  2. id_pracownik INT(1000) NOT NULL AUTO_INCREMENT,
  3. id_dzial INT(100) NOT NULL AUTO_INCREMENT,
  4. imie VARCHAR(20) NOT NULL,
  5. nazwisko VARCHAR(20) NOT NULL,
  6. telefon INT(10) NOT NULL,
  7. data_dodania DATETIME NOT NULL,
  8. PRIMARY KEY( id_pracownik),
  9. KEY pracownik(nazwisko),
  10. KEY dzial(id_dzial)
  11. )type=MyISAM;
  12.  
  13. CREATE TABLE dzial (
  14. id_dzial INT(100) NOT NULL AUTO_INCREMENT,
  15. nazwa_dzialu VARCHAR(50) NOT NULL,
  16. data_dodania DATETIME NOT NULL,
  17. data_edycji DATETIME,
  18. PRIMARY KEY( id_dzial)
  19. )type=MyISAM;
  20.  
  21. CREATE TABLE delegacje (
  22. id_delegacji MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
  23. id_pracownik INT(1000) NOT NULL AUTO_INCREMENT,
  24. miasto VARCHAR(50) NOT NULL,
  25. cel VARCHAR(50) NOT NULL,
  26. data_wyjazdu DATETIME NOT NULL,
  27. data_przyjazdu DATETIME NOT NULL,
  28. data_edycji DATETIME,
  29. PRIMARY KEY( id_delegacji,id_pracownik)
  30. )type=MyISAM;


Hej

Widzę takie błędy:
  1. W tabeli [Pracownicy] kolumna [id_dzial] nie może być jako AUTO_INCREMENT - musisz ją zadeklarować jako klucz obcy wiążący pracownika z działem z tabeli [dzial].
  2. Taki sam błąd popełniłeś w tabeli [delegacje] z kolumną [id_pracownik]
  3. W jakim celu podajesz przy INT wartość 1000, 100?? Samo INT wystarczy smile.gif
  4. W tabeli delegacje ograniczasz się z liczbą wpisów poprzez zastosowanie typu kolumny [id_delegacji] jako MEDIUMINT - daj INT
  5. W tabeli [delegacje] jako PRIMARY KEY wystarczy [id_delegacji]. Pole [id_pracownika] ma być kluczem obcym FOREGEIN KEY.
  6. Zastanowiłbym się nad rozszerzeniem wielkości tekstu w kolumnie [cel]. 50 znaków to naprawdę mało smile.gif
  7. Rozszerz długość pola [nazwisko] na przykładowo 50 znaków. Pomyśl nad nazwiskami dwu członowymi.
Ok - na razie tyle smile.gif


--------------------
Kliknij jeśli moja odpowiedź Ci pomogła.
askone.pl
Go to the top of the page
+Quote Post
osa2t
post
Post #7





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 29.07.2009

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


witam,

Dzięki za dobre wskazówki/uwagi, czas na poprawki.
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 Aktualny czas: 20.08.2025 - 21:10