filus08
23.05.2011, 20:14:54
Witam!! To mój pierwszy post, proszę więc o wyrozumiałość, umieściłem post tutaj bo od nie dawna zacząłem przygodę z tematyką www, ale do rzeczy.
Mam do stworzenia elektroniczny dziennik szkolny. Na początek wystarczą 2 konta: rodzicielskie i nauczycielskie. Język jakie wybrałem to PHP, MySQL i HTML i CSS. Bazę chcę utworzyć w PHPmyADMIN, wszystko umieszczał na wirtualnym serwerze(XAMPP)
Zacząłem od stworzenia szkieletu bazy danych, prosiłbym o ocenę i ewentualne wskazówki. Prosiłbym też o jakieś wskazówki dotyczące utworzenia mechanizmu logowania bądź sesji. Otóż, żeby opiekun bo zalogowaniu automatycznie wchodził na swoje konto, żeby nie wlazł gdzie indziej( co w przypadku gdy opiekun ma kilka dzieci??)
Nauczyciel tak samo po zalogowaniu wchodził tylko na swoje konto (biorąc pod uwagę, np. że nauczyciel uczy 2 przedmioty, prowadzi jakieś tam koło zainteresowań po lekcjach i do tego jest wychowawcą jakieś tam klasy). Znalazłem na necie mechanizm na stronie:
http://webcity.pl/webcity/wlasny_mechanizm_sesji_w_php Ale on ma w sobie masę błędów i nie mogę z nim dojść do końca.
Co do samej bazy oto jej szkielet:
UCZEN
U_ID
U_IMIE
U_NAZWISKO
U_PLEC
U_DATA_URODZENIA
U_PESEL
U_LEG_ID (LEG_ID)
U_NR_LEG_SZK
NAUCZYCIELE
N_ID
N_IMIE
N_NAZWISKO
N_PLEC
N_PESEL
N_NAZWA_DOK_TOZSAMOSCI (DT_ID)
N_TYTUL_NAUKOWY (TN_ID)
N_FUNKCJA (OF_ID)
N_NR_TEL_STACJ
N_NR_TEL_KOM
N_EMAIL
OPIEKUNOWIE
O_ID
O_IMIE
O_NAZWISKO
O_PESEL
O_NR_TEL_STAC
O_NR_TEL_KOM
O_EMAIL
o_STATUS_PRAWNY (SP_ID)
ADRESY
AD_ID
AD_OSOBY (U_ID,N_ID, O_ID)
AD_ZAMELDOWANIA_KOD_POCZTOWY
AD_ZAMELDOWANIA_MIEJSCOWOSC
AD_ZAMELDOWANIA_ULICA_NAZWA
AD_ZAMELDOWANIA_ULICA_NR
AD_ZAMELDOWANIA_MIESZKANIE
AD_ZAMIESZKANIA_KOD_POCZTOWY
AD_ZAMIESZKANIA_MIEJSCOWOSC
AD_ZAMIESZKANIA_ULICA_NAZWA
AD_ZAMIESZKANIA_ULICA_NR
AD_ZAMIESZKANIA_MIESZKANIE
POKREWIENSTWA
P_O_ID (O_ID)
P_U_ID (U_ID)
LEGITYMACJE_SZKOLNE
LEG_ID
LEG_NR_LEG_SZK
LEG_NR_UCZEN(U_ID)
LEG_UCZEN_KLASA (K_ID)
DOKUMENTY_TOZSAMOSCI
DT_ID
DT_NAZWA_NR
STATUSY_PRAWNE
SP_ID
SP_NAZWA
TYTULY_NAUKOWE
TN_ID
TN_NAZWA
OSOBY_FUNKCJE
OF_ID
OF_NAZWA
LATA _SZKOLNE
LSZ_ID
LSZ_ROK_NAZWA
LSZ_SEMESTR_NAZWA
KLASY
K_ID
K_NUMER_KLASY
K_NAZWA_KLASY
K_ROK_SZKOLNY_SEMESTR (LSZ_ID)
K_WYCHOWAWCA (N_ID)
K_UCZEN (U_ID)
DZIENNIKI
DZ_ID
DZ_KLASA_UCZEN (K_ID)
DZ_ROK_SZKOLNY_SEMESTR (LSZ_ID)
DZ_PRZEDMIOT (P_ID)
DZ_PRZEDMIOT_OCENA_WARTOSC (PO_ID)
DZ_PRZEDMIOT_OCENA_OPIS (PO_OPIS_OCENY)
DZ_PRZEDMIOT_OCENA_TYP (POT_ID)
DZ_ZACHOWANIE_OCENA_WARTOSC (ZO_ID)
DZ_ZACHOWANIE_OCENA_TYP (ZOT_ID)
PRZEDMIOTY
P_ID
P_NAZWA
P_NAUCZYCIEL (N_ID)
PRZEDMIOTY_OCENY
PO_ID
PO_WARTOSC
PO_OPIS_OCENY
PRZEDMIOTY_OCENY_TYPY
POT_ID
POT_NAZWA
ZACHOWANIE_OCENY
ZO_ID
ZO_WARTOSC
ZACHOWANIE_OCENY_TYPY
ZOT_ID
ZOT_NAZWA
PLAN_ZAJEC
PZ_ID
PZ_DZIEN_TYGODNIA
PZ_PRZEDMIOT (P_ID)
PZ_GODZINY_ZAJEC
PZ_SEMESTR (LZS_SEMESTR_NAZWA)
PZ_KLASA (K_ID)
GODZINY
G_ID
G_SYMBOL
Rozważałem również opcję ażeby nauczycieli, opiekunów i uczniów umieścić w jednej tabeli, ale wydaję mi się, że to by pogmatwało tylko cały wygląd bazy danych. Wychowawców umieściłem tabeli klasa. Jeszcze jeden problem mnie zatruwa, otóż czy silnik InnoDB będzie odpowiedni??
CuteOne
23.05.2011, 20:28:51
1. Mam nadzieję, że to projekt na uczelnie lub robisz to na własny użytek.. ?
2. Nie baza phpmyadmin tylko mysql
3. Na początek weź do ręki kartkę papieru i rozpisz sobie co ma się znaleźć w bazie danych. Następnie na nowej kartce połącz wszystkie te dane relacjami - to chyba najważniejsze
przykład:
problem - chcesz wyświetlić dane ucznia wraz z danymi rodziców
rozwiązanie - w tabeli opiekunowie musisz zawrzeć id ucznia, który jest ich dzieckiem lub połączyć obie tabele relacjami
Dobra rada... przed pisaniem w PHP rozpisz sobie wszystko na kartkach i trzymaj się tego do końca
filus08
23.05.2011, 20:49:53
Nie wydaję ci się, że tabela pokrewieństwa którą utworzyłem lepiej połączy tabelę opiekunów z uczniami?? Czy jak umieszczę tak jak piszesz w tabeli opiekunów id_ucznia to co w przypadku gdy opiekun czy opiekunowie będą mieli kilkoro dzieci?? Też zapomniałem dopisać do tabeli pokrewieństwa pola id_nauczyciela bo przecież nauczyciel też może być jednocześnie opiekunem.
Jak oceniacie ogólny schemat bazy danych. Ja jeszcze dzisiaj sprubóję wklepać do wszystko połączyć relacjami, i wrzucę to na forum, pewnie wtedy będzie lepiej to widoczne.
Tak robię to tylko i wyłącznie na własny użytek, na uczelnie mam taki projekt wykonać. Chcę to zrobić bo od dawna planuje zbratać się z PHP, i temu podobnymi. Moją słabą stroną jest tworzenie baz danych, chociaż już miałem z nimi styczność.
Co odnośnie systemu logowania?? Gdzie znajdę ciekawe skrypty?
Bazę danych już mam rozpisaną i tak ja ją widzę. Tylko chciałem znać opinię ludzi bądź użytkowników tego forum którzy mają większe doświadczenie ode mnie.
nekomata
23.05.2011, 23:00:17
To zrób na odwrót ... w tabeli uczniów dodajesz id_opiekuna , w ten sposób rodzic może mieć wiele dzieci bez problemu .
Co do nauczyciel który jest rodzicem : przecież może znajdować się w dwóch bazach danych prawda?Osobny login jako rodzic , osobny jako nauczyciel - problem solved . Albo jedno konto i osobne podstrony dla nauczycieli i rodziców : link pojawią się zależnie od statusu..
System logowania?Masz taką zaawansowaną bazę danych to na pewno coś możesz skrobnąć samemu . Jak masz z tym problem to jak masz zamiar napisać dodawanie / sprawdzanie ocen itd ?
filus08
24.05.2011, 00:10:05
Ale czy moje rozwiązanie z tabelą polrewieństwo jest złe??
Wiesz no bede miał problem, dlatego jestem w dziale przedszkole, może dzięki waszym sugestiom uda mi się coś stworzyć
nekomata
24.05.2011, 02:11:23
Dobrego słowa użyłeś sugestia . Jest dokładnie jak mówisz.. możemy Ci sugerować różne rzeczy , podawać argumenty , podpowiadać . Ostateczna decyzja jednak należy do Ciebie .
Jeśli piszesz takie dziennik dobrze by było rozumieć działanie własnego projektu prawda?Dzięki temu możesz łatwo dodawać opcję , jednak jeśli liczysz że poprowadzimy Cię za rękę przez cały projekt (w co wątpię bo już całą bazę sobie rozpisałeś i odwaliłeś kawał roboty ) to się mylisz .
Zaleciłem 'skrobnięcie' logowania samemu , ponieważ źle jest 'pisać' projekt typu kopiuj&wklej bo wtedy sam nie wiesz co robisz .
W internecie jest pełno poradników / książek (jak znasz angielski to tym lepiej ponieważ dużo więcej źródeł i tutoriali znajdziesz . ).
Co do 'pokrewieństw' mhmmm.. myślę że to niepotrzebna tabela ... bo trzymasz tylko ID ucznia i ID rodzica . Kolumna z ID rodzica w tabeli uczniów jest efektywniejsza i prostsza w użyciu według mnie.
celbarowicz
24.05.2011, 08:36:47
Te dzienniki elektroniczne to straszna rzecz. Mam koleżankę pracującą w szkole. Normalne sprawdzenie obecności zajmuje kilka minut. Wpisanie oceny do dziennika to też czas. Jeśli trzeba ocenę wpisać do dziennika elektronicznego to ... no własnie co? Należy oceny gdzieś na jakiejś kartce zanotować , aby nie wymieszały się z wcześniej wpisanymi, następnie ktoś musi je wprowadzić do kompa. Pytanie kto?(uczyciel?) To jest dublowanie roboty. Rodzice zamiast spotkać się z wychowawcą lub nauczycielem przedmiotu unikają szkoły.
Twój dziennik jako wprawka w programowaniu to niezła rzecz. Z punktu widzenia nauczyciela to strasznie upierdliwy wynalazek.
PS: W jednej ze znanych mi szkół są specjalne jednorazowe karty wypełniane na lekcji. Po lekcjach zdawane są do sekretariatu i tam ręcznie( a miało być czytnikiem)wprowadzane do kompa. KARTKA TAKA KOSZTUJE. Są niezłe cyrki, bo oceny często nie zgadzają się.
A miał być lepiej.
nekomata
24.05.2011, 08:54:55
Elektroniczny dziennik nie byłby takim upierdliwym rozwiązaniem dla nauczyciela jeśli byłby użyty zamiast normalnego dziennika a nie razem z nim .
Ale takie rzeczy tylko w Erze .
boro11
24.05.2011, 14:41:10
U mnie w szkole jest tylko dziennik elektroniczny i sprawuję się bardzo doskonale. Powodzenia w projekcie
filus08
24.05.2011, 21:24:45
Jedna rzecz mnie nurtuje i może mi to wytłumaczycie. Jeżeli mam utworzoną tablę nauczyciele i drugą przedmioty, i jak w tabeli nauczyciele dodam rekord id_przedmiotu to jak potem to uzupełnić w tabeli w przypadku gdy nauczyciel uczy wiięcej niż jeden przedmiot?albo na odwrót: jeśli w tabeli przedmioty umieszczę id_nauczyciela to co w przypadku gdy jednego przedmiotu uczy więcej niż jeden nauczyciel? Jak to rozwiązać? Piszę w MySQL w programie PHPmyAdmin.
Kolejna rzecz: rekord płeć, czy w PHPmyAdmin można zrobić coś w rodzaju rozwijanej listy, żeby wybrać czy to kobieta czy gościu?
Czy ktoś może mi to wytłumaczyć ? szukam na necie ale nie mogę znaleźć.
mat-bi
24.05.2011, 21:29:14
Co do pierwszego - osobna tabelka powinna być do tego dobra.
A co do płci - przy tym wpisujesz 1 i 2, np. 1 - męż, 2 - kob.
filus08
24.05.2011, 21:34:47
Cytat(mat-bi @ 24.05.2011, 22:29:14 )

Co do pierwszego - osobna tabelka powinna być do tego dobra.
Tabelka tzn.

przedmioty
id_przedmiot
id_nauczyciel
o to ci chodzi?
A co do płci - przy tym wpisujesz 1 i 2, np. 1 - męż, 2 - kob.
Tu tez osobna tabelka
plec
i potem tylko id_plec ?
to masz na mysli?
I jeszcze jedno. Jak to potem połączyć relacją,ażeby np. w tabeli uczeń gdzie będzie rekord id_plec, mógł sobie wybierać 1 czy 2 opcję
mat-bi
24.05.2011, 21:39:00
Nieee, do płci nie trzeba osobnej tabelki, to byłoby co najmniej dzikie

Co do drugiego:
Potem tylko obsługujesz
celbarowicz
24.05.2011, 21:39:47
Miotasz się i o to chodzi.Masz więc zamiar zrozumieć problem. Jest coś takiego jak arkusz organizacyjny szkoły-np Vulkan.
Najpierw ustal listę przedmiotów nauczanych w w szkole(id,nazwa przedmiotu).
Lista klas(id, klasa-czyli grupa uczniów -nie gabinet)
program nauczania w klasie(id_p,id_klasy,id_przedmiotu)
//----------------------------
lista nauczycieli (id,nazwisko, itd..ORAZ unikalny skrót z imienia i nazwiska)
nauczyciel uczy (id,id_nauczyciela,id przedmiotu)
przydziały(id,id_p, id_nauczyciela)
Wprowadzasz dane od góry.......
Wyszukiwanie w zależności od potrzeb. NP: Bierzesz nauczyciela o id=5; W tabeli przydziały otrzymasz wszystkie id_p->na ich podstawie w tabeli program nauczania uzyskasz ifo jakich przedmiotów i w jakich klasach nauczyciel naucza(a w zasadzie otrzymasz ich idy)
Być może gdzieś popełniłem błąd, ale tak bym podszedł do sprawy. Ktoś już napisał -rozrysuj i znormalizuj bazę.
POWODZENIA.
filus08
24.05.2011, 21:48:33
celbarowicz z tego co piszesz to ja mojej bazie podanej u góry jest tylko brakuje mi ewentualnej tabeli przydziały, dzięki za news, właśnie piję kawę bo przede mną długa romantyczna noc z mysql

to to rozważę co napisałeś.
celbarowicz
24.05.2011, 22:29:35
Chyba przesadziłem. Jeśli tabelę program nauczania ,rozszerzyć o pole id_nauczyciala to zbędna będzie tabela przydziały.
filus08
24.05.2011, 23:03:39
Tak ale nadal zostaję ci wtedy mój wcześniej napisany problem dobrego rozpisania przedmiotów , wiesz ja jednak rozbiję to i dołożę tabelę o nazwie tak jak podałeś poprzednio np. przydziały i tam będzie id_przedmiotu i id_nauczyciela, podobnie jak w szkielecie połączyłem tabele opiekun i uczeń tabelą pokrewieństwa. W tabeli nie program_nauczania nie umieścisz id_nauczyciela, bo nie zawsze jeden program realizuję jeden nauczyciel, moze być ich kilku, czyż nie?? Ale program nauczania zostawmy na potem. Najpierw trzon bazy potem ewentualnie coś się dołoży.
Co ty na to? Wydaje mi się, że tak będzie najrozsądniej.
celbarowicz
25.05.2011, 07:35:00
Przydziały będą powielały tylko tabelę programy nauczania- a to jest zbędne(miejsce w bazie , oraz wypełnianie tabeli).
filus08
25.05.2011, 11:39:07
Teraz mam inny kłopot. Otóż

Jak połączyć 2 klucze główne, tz. id_opiekun i id_nauczyciel do tabeli pokrewieństwa pokr_osoba, jakiej relacji użyć? Jest to możliwe??
Może jakieś argumenty trzeba ustawić, szukam ale nic nie mogę znaleźć
Czy w tabeli pokrewieństwa dodać jeszcze rekord pokr_osoba_2 i tam dać id_opiekuna??
CuteOne
25.05.2011, 15:05:37
filus8: nie łączysz ich bo i po co ;] pamiętaj, że nie wszystko musi być ze sobą połączone [a łączenie nauczyciela z opiekunem to chyba jakaś pomyłka?] - większość otrzymasz tworząc odp. zapytania
ps. jak chcesz projektować bazy danych polecam fajny programik MySQL Workbench 5.2 CE
filus08
25.05.2011, 15:12:57
Tak tabel opiekunowie to rodzice bądź opiekunowie posiadające jakiś status prawny(ojciec,ojczym, mama itp). Biorąc pod uwagę fakt iż nauczyciel też może być zarazem rodzicem dziecka i ażeby nie dublować przy wpisywaniu danych do tabeli opiekunowie chciałem to rozwiązać w taki sposób jak powyżej, czyli tabela pokrewieństwa gdzie do rekordu id_uczen bedzie odpowiedni opiekun czyli id_opiekuna bądz id_nauczyciela (jeśli jest rodzicem/opiekunem prawnym) tylko nie wiem jak to zrobic w php my admin. Czy w tabeli pokrewieństwa dodać jedno pole, np pokr_osoba gdzie chcę połączyć z id_nauczyciela i id_opiekuna(jest taka możliwość ?) czy osobno
create table{
id_opiekuna klucz obcy
id_nauczyciela kluczy obcy
id_ucznia klucz obcy
Mam nadzieję, że zrozumiecie mój problem.
Podobnie zresztą chcę zrobić z tabela przedmioty_nauczyciele
przedmioty_nauczyciele
id_przedmiotu
id_nauczyciela_uczącego ( id_nauczyciela)
czy takie rozwiązanie jest właściwe czy idę złym torem ?heh
[quote name='CuteOne' date='25.05.2011, 16:05:37 ' post='866484']
filus8: nie łączysz ich bo i po co ;] pamiętaj, że nie wszystko musi być ze sobą połączone [a łączenie nauczyciela z opiekunem to chyba jakaś pomyłka?] - większość otrzymasz tworząc odp. zapytania
Może mam za małą wiedzę jeszcze ale sukcesywnie się uczę. Ale żeby zapytanie było ok to nie musi być realcyjna baza danych, tzn. wszystkie tabele połączone odpowiednimi relacjami??
CuteOne
25.05.2011, 15:20:26
nie

relacje są fajne ale tylko gdy wykorzysta się ich pełny potencjał - bez urazy ale umieć stworzyć relacje to nie to samo co dobrze ją wykorzystać. Ale wróćmy do tematu
SELECT
o.*, n.*
FROM
uczen u
LEFT JOIN opiekun o IN(o.id_opiekun = u.id_opiekuna)
LEFT JOIN nauczyciel n IN(n.id_nauczyciel = u.id_nauczyciela)
WHERE
u.id_ucznia = 100
Bez relacji znając tylko id_ucznia pobieramy dane jego nauczyciela i opiekuna. Więcej google -> JOIN, LEFT JOIN, INNER JOIN - sprawdź każdy ;]
filus08
25.05.2011, 15:38:46
Oglądałem już odpowiedni kurs, zapytanie bazodanowe znam dobrze, ok to działam dalej jak coś nie będzie wychodzić będę dalej was zatruwał
Właśnie instaluję mysql worbench, zobaczymy co to poleciłeś
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.