Baza przechowująca informacje o wyjazdach służbowych

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.

0

Wywal drugą tabelę. Albo chociaż nie przechowuj w niej kodów, bo będziesz miał dużą nadmiarowość danych. Nikogo nie interesuje, czy pracownik wyjechał do Warszawy (00-950), czy też do Warszawy (00-999)

0

Wywal drugą tabelę. Albo chociaż nie przechowuj w niej kodów, bo będziesz miał dużą nadmiarowość danych. Nikogo nie interesuje, czy pracownik wyjechał do Warszawy (00-950), czy też do Warszawy (00-999)

Nie zgadzam się.

Twoja implementacja z trzema tabelami jest OK - pod warunkiem, że chcesz mieć informacje o miastach takie jak kod pocztowy, nazwa itp.

Kod pocztowy jako kolumna do tabeli Miasta jest jak najbardziej OK (w praktyce można ją opatrzyć Unique index dla większej spójności - a nawet powinno się).

Zastosowanie kodu pocztowego jako PK byłoby przenormalizowaniem.

0

witam,

Dzięki za odpowiedz. Jeżeli zrezygnuje z kody pocztowego nadal mam trzymać się wersji 3 tabel? Ogólnie chce wypisać że Pan/Pani delegacja do Warszawy od ?? do ?? itd. Poźniej przeszukiwać tylko ile dany pracownik był np. w Marcu na delegacjach. Na tą chwilę nie widzę potrzby innych funkcji.

0

Ja bym zaproponował denormalizację i zrobił dwie tabele tj. wywalił tą z miastami. Chociażby w celu uproszczenia dodawania delegacji. Nie będziesz musiał sprawdzać czy dane miasto jest już w tabeli z miastami i odpowiednio reagować dodając nowe lub nie. No chyba, że w formularzu dodawania nowej delegacji chcesz mieć podpowiadanie miast z tej tabeli z miastami. Dodasz kilka(set?)dziesiąt miast i będzie spokój, no i na pewno łatwiej tak jest uniknąć błędów w nazwach miast. Ale jeżeli to ma być proste, to dwie tabele wystarczą. A podana przez ciebie funkcjonalność to jedno proste zapytanie.

0

PS. już bardziej trzecią tabelę bym poświęcił na działy w której pracownik pracuje.

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.

CREATE TABLE pracownik (
    id_pracownik INT(1000) NOT NULL AUTO_INCREMENT,
    id_dzial INT(100) NOT NULL AUTO_INCREMENT,
    imie VARCHAR(20) NOT NULL,
    nazwisko VARCHAR(20) NOT NULL,
    telefon INT(10) NOT NULL,
    data_dodania DATETIME NOT NULL,
    PRIMARY KEY( id_pracownik),
    KEY pracownik(nazwisko),
    KEY dzial(id_dzial)
)type=MyISAM; 

CREATE TABLE dzial (
    id_dzial INT(100) NOT NULL AUTO_INCREMENT,
    nazwa_dzialu VARCHAR(50) NOT NULL,
    data_dodania DATETIME NOT NULL,
    data_edycji DATETIME,
  PRIMARY KEY( id_dzial)
)type=MyISAM;

CREATE TABLE delegacje (
    id_delegacji MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
    id_pracownik INT(1000) NOT NULL AUTO_INCREMENT,
    miasto VARCHAR(50) NOT NULL,
    cel VARCHAR(50) NOT NULL,
    data_wyjazdu DATETIME NOT NULL,
    data_przyjazdu DATETIME NOT NULL,
    data_edycji DATETIME,
    PRIMARY KEY( id_delegacji,id_pracownik)
)type=MyISAM;
0

W tabeli pracownik wywal AUTO_INCREMENT z pola id_dzial, ponieważ tam przechowujesz id_dzialu już istniejącego, a nie je tworzysz.

Przydałoby się jeszcze klucze obce zadeklarować ale oczywiście w gównianym MySQL (MyISAM) nie da się tego zrobić :-/

1 użytkowników online, w tym zalogowanych: 0, gości: 1