Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Plan lekcji
Forum PHP.pl > Forum > PHP
modern-web
Witam serdecznie.
Mam mały problem z stworzeniem planu lekcji (z użyciem bazy danych).
Nie wiem jaką strukturę bazy MySQL przyjąć i w jaki sposób podzielić dane...

Kryteria:
- 10 lekcji dziennie
- dni od poniedziałku do piątku

Jakie są wasze pomysły?

P.S.
Proszę nie dawać mi gotowców tylko opisać własne pomysły smile.gif

Z góry dzięki!
Pozdrawiam tongue.gif
ADeM
Ja stworzyłbym jedną tabelę, której primary key to by była godzina + dzien tygodnia. Do tego pola z przedmiotem, sala itp...
Crozin
1. Czy dany typ zajęć zawsze odbywa się w tej samej sali?
2. Zajęcia zawsze trwają 45 minut?
3. Istnieje tylko 10 możliwych godzin rozpoczęcia zajęć?
4. Czy istnieje jakiś podział na grupy? Np. w poniedziałek na G4 grupa I-sza informatykę w sali 231 z XYZ, a grupa II-ga ma informatykę w sali 341 z ZYX.
modern-web
Cytat
Ja stworzyłbym jedną tabelę, której primary key to by była godzina + dzien tygodnia. Do tego pola z przedmiotem, sala itp...

Wiesz... bardzo pomocne ;> Sam bym na to nie wpadł...

Cytat
1. Czy dany typ zajęć zawsze odbywa się w tej samej sali?
2. Zajęcia zawsze trwają 45 minut?
3. Istnieje tylko 10 możliwych godzin rozpoczęcia zajęć?
4. Czy istnieje jakiś podział na grupy? Np. w poniedziałek na G4 grupa I-sza informatykę w sali 231 z XYZ, a grupa II-ga ma informatykę w sali 341 z ZYX.


Hmmm...
1. różne sale (lecz to akurat nieistotne)
2. tak ale nie widzę tutaj związku - dlaczego? zaraz wytłumaczę...
3. nie, zajęcia rozpoczynają się o różnych godzinach i o różnych kończą
4. tak ale nie widzę związku - patrz niżej...

Mój konspekt jest taki:



Ma to działać na zasadzie:
1. ktoś klika jedną z wymienionych klas (nad tabela)
2. wyswietla się plan lekcji dla tej wlasnie klasy
3. dni tygodnia jak i godziny lekcyjne wpisane beda na stale do pliku HTML - nie będą pobierane z bazy (chyba, że bedzie to konieczne)
4. chciałbym aby było to na zasadzie zapytań do bazy - jak najprostszych (np. mysql_fetch_object) - nie muszą być to krótkie ale trudne zapytania. Może być sporo roboty, lecz żeby było to czytelne smile.gif

Słucham waszych propozycji... Nie mam pojęcia jak się do tego zabrać :/
Próbowałem już podzielenia planu na 2 części... pon,wt,śr i czw, pt. , bo mój WebServ odmawia posłuszeństwa gdy chcę dodać 52 kolumny do tabeli xP
No ale stwierdziłem, że to nie ma sensu i jest to zbyt nowatorskie podejście.
markonix
Jedna tabela na klasę np. plan_2a (wybór klasy GET'em).

Tabelka w postaci:
|| Dzień (int lub tekstowo) || Godzina lekcyjna (np. od 0 do 10) || Przedmiot (varchar) || Sala (int) ||

Wyciąganie danych z bazy proste. Grupowanie według dni (jest sposób nawet sortowanie w/g własnego porządku gdybyśmy wybrali tekstowo), a następnie grupowanie w/g godzin.

Przykład:
Kod
Pn || 0 || Polski || 2
Pn || 1 || Polski || 2
Pn || 2 || Matematyka || 12
Wt || 0 || Polski || 22
Wt || 1 || - || 21
Wt || 2 || W-f || Sala. gim.
Sr || 4 || Etyka || 666
Sr || 5 || Biologia || 324
Mephistofeles
Nie rób osobnych tabel dla każdej klasy.
Lepiej zapisać id klasy w tabeli z zajęciami.
modern-web
Mephistofeles; mógłbyś podać jakiś przykład? Twój pomysł jest całkiem racjonalny smile.gif
Crozin
1. Tabela z przedmiotami: id, nazwa (np. "j. polski", "algebra").
2. Tabela z klasami: id, rocznik (np. "2008 / 2011"), klasa (np. "a", "b","c"; ta kolumna jakąś sensowniejszą nazwę powinna mieć).
3. Tabela łącząca dwie powyższe: id klasy, id przedmiotu, dzień tygodnia (ENUM), godzina rozpoczęcia
markonix
Cytat(Mephistofeles @ 5.11.2010, 20:40:52 ) *
Nie rób osobnych tabel dla każdej klasy.
Lepiej zapisać id klasy w tabeli z zajęciami.

Jak kto woli. W zasadzie faktycznie lepiej mieć więcej wierszy niż dzielić na tabele, ale z drugiej strony jedna klasa jest wystarczająco osobnym obiektem aby móc ją wstawić do osobnej tabeli.

Jednak może lepiej w jednej tabeli (łatwiej o jakieś podsumowania statystyczne np. ile jest różnych klas czy inne).
Tak więc przed dniem dodać identyfikator klasy (string) .
Crozin
Cytat
Jak kto woli.
Nie, nie jak kto woli. Podstawą relacyjnych baz danych (a taką jest MySQL) jest normalizacja danych, a takie praktyki poza tym, że są wyjątkowo niewygodne to denormalizują strukturę danych.
Cytat
Tak więc przed dniem dodać identyfikator klasy (string) .
Jest bardzo niewiele sytuacji (pomijamy sytuacje, gdzie identyfikator składa się z więcej niż jeden kolumny) gdzie identyfikatorem powinno być coś innego niż klasyczny klucz liczbowy.
modern-web
Dzięki Panowie smile.gif
Wasze rady był bardzo pomocne smile.gif

Pozdrawiam i jeszcze raz dzięki.
markonix
Cytat(Crozin @ 5.11.2010, 21:25:25 ) *
Jest bardzo niewiele sytuacji (pomijamy sytuacje, gdzie identyfikator składa się z więcej niż jeden kolumny) gdzie identyfikatorem powinno być coś innego niż klasyczny klucz liczbowy.


Uważasz, że lepszym pomysłem by było tworzenie osobnej tabeli z relacją, która by przypisywała nazwę klasy numerowi?
Chyba, że nie zrozumiałeś do końca co miałem na myśli - chodziło mi o dodatkową kolumnę z identyfikatorem klasy w postaci string typu '3a, 4b' itd. Nie uwzględniłem tu kolumny z kluczem, który zwykle określa się za pomocą id (int) z autoinkrementacją.
Crozin
Klasa powinna być przechowywana w osobnej tabeli ponieważ stanowi inny obiekt. Zwróć uwagę, że klasa może mieć przypisane rzeczy typu wychowawca, uczniowie, jakieś osiągnięcia itp.
Mimo iż na tym etapie o takich rzeczach nie ma mowy w przyszłości mogą się pojawić - wtedy nie trzeba będzie przebudowywać połowy bazy. Tak więc, tak... powinna być osobna tabela, nawet jeżeli obecnie miałaby zawierać jedynie ID i nazwę klasy.
markonix
Tośmy się trochę nie dogadali bo zrozumiałem, że sparowałeś mój pomysł z osobnymi tabelami.
celbarowicz
Najlepiej to zapoznać się z VULKANEM-program do układania planu lekcji.
Nie trzeba się go uczyć jeśli masz zamiar napisać własny, dobrze by było gdyby ktoś go Tobie zaprezentował.
Chodzi o to ,że należy wprowadzić określone dane-jeśli będziesz miał odpowiedni przykład to będzie wiadomo jakie tabele są potrzebne.
Sposób przetwarzania to ?...
modern-web
Cytat(celbarowicz @ 6.11.2010, 00:30:42 ) *
Najlepiej to zapoznać się z VULKANEM-program do układania planu lekcji.
Nie trzeba się go uczyć jeśli masz zamiar napisać własny, dobrze by było gdyby ktoś go Tobie zaprezentował.
Chodzi o to ,że należy wprowadzić określone dane-jeśli będziesz miał odpowiedni przykład to będzie wiadomo jakie tabele są potrzebne.
Sposób przetwarzania to ?...


Khm. Właśnie o to chodzi, że VULCAN jest beznadziejny...
Nie szukam gotowych rozwiązań - uczę się tworząc indywidualne projekty.
Prosiłem tylko o rady, które otrzymałem i za które serdecznie dziękuję.
Temat do zamknięcia.
outsider
VULCAN beznadziejny ? Nie robię tu żadnej reklamy, ale ten program sam układa plan lekcji z podanych sal/klas/nauczycieli tak, żeby wszystko pasowało do kupy(czyli żeby nie było okienek między lekcjami itp.). Oczywiście najtańszą metodą jest tworzenie planu samemu, no ale, coś za coś smile.gif
modern-web
Ale jest jedno zastrzeżenie... Wygląd i sposób przedstawiania danych.
Nie chodzi tu o koszt tylko o estetykę i prostotę.
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.