Baza danych pod system rejestracji wizyt

0

Witam serdecznie!
Mam przed sobą pierwsze, dla mnie bardziej skomplikowane zadanie programistyczne - dlatego chciałbym prosić o poradę.
Postawiłem sobie za cel system rejestracji wizyt u klientów obsługiwany przez handlowców mianowicie:

  • Handlowiec loguje się do systemu
  • Wybiera dzień w którym chce dodać wizytę (domyślnie aktualna data)
  • Zostaje wyświetlony formularz rejestracji wizyty w którym pole klient jest polem słownikowym - handlowiec wybiera z listy klienta jednak lista ta wyświetla tylko jego klientów (z założenia w systemie wyższym np sprzedażowym klient ma pole "przedstawiciel" w którym wpisane jest ID handlowca - przypisanie klienta do handlowca).
  • Po wybraniu klienta automatycznie uzupełniają się niektóre standardowe pola formularza jak np adres, nip itp.
  • Pole cel wizyty powinno być słownikowe - ok 6-7 opcji do wyboru.
  • W przypadku braku klienta w bazie jest możliwość dodania nowego klienta

Dziennie każdy przedstawiciel może odbyć kilka wizyt
Konto administratora powinno mieć opcje przeglądania wizyt według dni oraz według przedstawicieli.

Tak wygląda opis systemu. Ja zakładam stworzenie takich tabel:
Przedstawiciel
Dzień
Wizyta
Klient
Administrator

tylko nie do końca wiem czy dobrze rozumiem relacje oraz czy tabele są wystarczające. Generalnie nie wiem do kogo powinna być przypięta tabela klient proszę o pomoc. Rysunek niżej:
user image

Proszę o pomoc, z góry dzięki za uwagi.

Pozdrawiam!

EDIT:
Generalnie po przeczytaniu kilku tematów zrobiłem coś takiego:

user image
Czy teraz biorąc pod uwagę że w wizycie mają być pola słownikowe takie jak CEL, Czy prowadzi działalność, Rodzaj działalności
Do każdego z pól słownikowych powinienem stworzyć tabele z relacją 1:1 do wizyty?

0

Czy prowadzi działalność, Rodzaj działalności - to chyba cechy Klienta, prawda? Więc pasowałoby raczej do niego słownik rodzajów działalności podpiąć do tabeli Klient.
Natomiast cel wizyty to cecha Wizyty, więc słownik celów trzeba podpiąć do tabeli Wizyt.
Słowniki z natury są w relacji 1:N z tabelą opisywaną. ;)
Zastanów się też, jak tutaj dodać administratorów. Może lepiej by było mieć tabelę Użytkownik, w niej loginy i hasła oraz typ użytkownika (Admin, Handlowiec) i Id, które byłoby kluczem obcym w tabeli Handlowców. Ale to zależy od tego, czy administratorzy i handlowcy będą używali tej samej aplikacji czy nie.

0

//Czy prowadzi działalność, Rodzaj działalności - to chyba cechy Klienta, prawda? Więc pasowałoby raczej do niego słownik rodzajów działalności podpiąć do tabeli Klient.
//
Zdecydowanie masz rację natomiast dane klientów będą ściągane z systemu sprzedażowego gdzie nie było zapisanych tych danych dlatego trzeba będzie uzupełnić je ze słownika.

//Natomiast cel wizyty to cecha Wizyty, więc słownik celów trzeba podpiąć do tabeli Wizyt.
//
Zgadzam się co do tego nie ma wątpliwości.

//Słowniki z natury są w relacji 1:N z tabelą opisywaną.
//
Tu akurat nie rozumiem dlaczego? Do jednej wizyty przypinam zawsze tylko jeden cel wizyty więc dlaczego relacja Wizywa 1:N Cel ? Oczywiście proszę tylko o wytłumaczenie:)

Zastanów się też, jak tutaj dodać administratorów. Może lepiej by było mieć tabelę Użytkownik, w niej loginy i hasła oraz typ użytkownika (Admin, Handlowiec) i Id, które byłoby kluczem obcym w tabeli Handlowców. Ale to zależy od tego, czy administratorzy i handlowcy będą używali tej samej aplikacji czy nie.

To właśnie mój problem - chciałbym zrobić to za pomocą frameworka Yii lub symfony nie do końca wiem jak zorganizować w tym przypadku logowanie :/ Może zwyczajnie dodać drugi formularz logowania dla administratora który by czerpał z innej tabeli nie powiązanej z niczym innym?

Dzięki za uwagi - liczę na pomoc.

0

Ok chyba baza jest gotowa - proszę o ocenę czy tak jest ok:

baza.png

0

Dlaczego Rodzaj_hodowli jest słownikiem dla Wizyty, a nie dla Hodowli?

0

Dodałbym jeszcze do Wizyty jakiś status (ewentualnie kilka innych pól typu uwagi/notatka, ...). Chyba że ten system to tylko taki kalendarz-przypominajka.

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