Schemat bazy danych szkoły
Pracuję nad prostym systemem szkolnym, który obsługuje rejestrację uczniów i harmonogram. Ponadto system powinien obsługiwać różne typy szkół, takie jak przedszkola, szkoły podstawowe, średnie i liceum (przedszkola i szkoły podstawowe).
Nie jestem ekspertem w projektowaniu baz danych, ale nadal podążam za tym, czego się uczę, czytając i ćwicząc.
- Student
- Rodzic
- Student_parent (jeśli więcej niż jeden rodzic chce być w systemie)
- Szkoła (gdzie system może sprawdzić, do jakiego poziomu uczniowie należą (podstawowa czy średnia itd.))
- Przedmiot (wszystkie przedmioty w szkołach)
- Klasa (w zasadzie harmonogram)
- Sala lekcyjna (każdy pokój i laboratorium w szkole (w zasadzie wyposażenie szkoły))
- Frekwencja (jeszcze nie)
- Znaki (jeszcze nie)
czy relacje między tabelami są wystarczające lub czy trzeba je przeprojektować? Masz jakiś problem z tym podstawowym schematem? Czy to wystarczy dla systemu? Jak wdrożyć terminy (semestr 1 i semestr 2) oraz lata? A co z końcem roku. Jak przenieść uczniów na nowy rok (jak to zrealizować)?
Mam nadzieję, że zanim zacznę go programować, zdobędę kilka uwag na temat ulepszeń lub problemów ze schematem.
Dziękuję Ci
. . Edycja: wdrażanie sugestii Johna Herberta . . .
Wdrażanie punktów Johna z wyjątkiem ostatniego, ponieważ w szkole nie ma wydziałów, a liczba uczniów jest bardzo subiektywna w stosunku do roku.
- zmieniono nazwy tabel z przedrostkami w celu ich grupowania.
- Zmodyfikowano kilka pól zgodnie z sugestią Johna w celu lepszego wyszukiwania i grupowania
- Dodano termin tabeli i połączono go ze szkołą (KG- Primary- Sec..etc)
- W razie potrzeby zmodyfikowano rozmiary pól z Int (11) na coś mniejszego
Schemat bazy danych po edycji
po wdrożeniu tych rzeczy ktoś nie może pomóc, ale błąka się. Czy w przyszłości będę musiał dodawać indeksy wydajności? Gdzie będą ewentualnie potrzebne indeksy?
Mam nadzieję, że przyniesie to korzyści komuś, kto jest zainteresowany projektowaniem DB.
Odpowiedzi
Podsumowując, myślę, że Wasze Kluczowe Relacje są na tyle proste i jasne, że mogę łatwo znaleźć swoją drogę. Prawdopodobnie znajdziesz kilka miejsc do zmiany podczas tworzenia makiety i ostatecznie kodowania procedur składowanych i innych procesów. Oto moje myśli, gdy je przeglądałem.
- Zastąp rodzica czymś bardziej ogólnym, np. Opiekunem. Takie użycie języka otwiera drzwi dla innych autorytetów dla ucznia, takich jak dziadkowie i adoptowani rodzice, a także pozwala na umieszczenie flagi, która wskazuje, że dana osoba jest kontaktem w nagłych wypadkach lub może odebrać dziecko.
- Rozdziel pole [Full_Name] na dwa pola; [Given_Name] i [Nazwisko]. Pomaga to podczas sortowania według nazwy podczas programowania. (Lepiej, żeby dwie siostry Williams pojawiły się obok siebie w raporcie, niż wszystkie Mary ze szkoły zgrupowane razem).
- Zaproponuj przeniesienie pola [termin] pod tabelą [subject] do tabeli [class]. To pole może służyć do wskazania, czy Bobby Tables był w tej klasie wiosną 2010 czy jesienią 2009 roku, z tym konkretnym nauczycielem w określonym pokoju. Chciałbym mieć inną tabelę z zakresami dat dla tych terminów. (Na marginesie, INT (11) może być trochę przesadą. Sto lat jednotygodniowych semestrów dałoby tak naprawdę tylko 5000 terminów, a wystarczyłoby INT (4))
- Jeśli chodzi o promowanie uczniów na następny rok, można to zrobić z nowym polem pod tabelą [student], z prostym INT (2) oznaczającym rok ich edukacji. Procedura składowana, która jest uruchamiana pod koniec roku szkolnego, może sprawdzić zdobyte punkty i przesunąć je w górę.
- Można również rozważyć uwzględnienie w tabelach [przedmiot] i [nauczyciel] wydziału, na przykład matematyki, nauk ścisłych lub języka angielskiego. Można to wykorzystać, aby pomóc w pogrupowaniu wszystkich nauczycieli przedmiotów ścisłych lub pokazaniu wszystkich lekcji historii dostępnych w tym semestrze, zwłaszcza jeśli szkoła jest wystarczająco duża, aby mieć więcej niż jedną sesję danej klasy.