Projektowanie baz danych

Projektowanie bazy danych to proces, który obejmuje analizę wymagań, określenie encji, relacji oraz struktur tabel, tak aby dane były spójne, łatwe do utrzymania i wydajne w operacjach CRUD (Create, Read, Update, Delete).

W tym przykładzie baza danych ZarzadzanieSzkola obsługuje system zarządzania szkołą, obejmujący uczniów, nauczycieli, klasy, przedmioty, oceny i dane kontaktowe.


1. Tabele w bazie danych

1.1. Uczniowie

Kolumna Typ Klucz / Relacja
uczen_id INT PRIMARY KEY, AUTO_INCREMENT
imie VARCHAR(50)
nazwisko VARCHAR(50)
data_urodzenia DATE
klasa_id INT FOREIGN KEY → Klasy.klasa_id
  • Cel tabeli: przechowywanie podstawowych informacji o uczniach.
  • Relacje:

    • klasa_id tworzy relację jeden do wielu między Klasy → Uczniowie.

1.2. Nauczyciele

Kolumna Typ Klucz / Relacja
nauczyciel_id INT PRIMARY KEY, AUTO_INCREMENT
imie VARCHAR(50)
nazwisko VARCHAR(50)
przedmiot VARCHAR(50)
kontakt_id INT UNIQUE, FOREIGN KEY → DaneKontaktowe.kontakt_id
zarobki DECIMAL(10,2)
  • Cel tabeli: przechowywanie danych nauczycieli, w tym powiązanego kontaktu.
  • Relacje:

    • Jeden do jednego z tabelą DaneKontaktowe (unikalny kontakt_id).
    • Jeden do wielu z tabelą Klasy – jeden nauczyciel może prowadzić wiele klas.

1.3. Klasy

Kolumna Typ Klucz / Relacja
klasa_id INT PRIMARY KEY, AUTO_INCREMENT
nazwa_klasy VARCHAR(50)
nauczyciel_id INT FOREIGN KEY → Nauczyciele.nauczyciel_id
  • Cel tabeli: definiowanie klas w szkole.
  • Relacje:

    • Jeden do wielu: jedna klasa → wielu uczniów.
    • Jeden do wielu: nauczyciel → wiele klas.

1.4. Przedmioty

Kolumna Typ Klucz / Relacja
przedmiot_id INT PRIMARY KEY, AUTO_INCREMENT
nazwa_przedmiotu VARCHAR(50)
  • Cel tabeli: lista wszystkich przedmiotów nauczania.

1.5. UczenPrzedmiot (tabela łącząca)

Kolumna Typ Klucz / Relacja
uczen_id INT FOREIGN KEY → Uczniowie.uczen_id
przedmiot_id INT FOREIGN KEY → Przedmioty.przedmiot_id
PRIMARY KEY (uczen_id, przedmiot_id)
  • Cel tabeli: realizacja relacji wiele do wielu między uczniami a przedmiotami.
  • Dzięki tej tabeli możemy przypisać wielu uczniów do wielu przedmiotów.

1.6. DaneKontaktowe

Kolumna Typ Klucz / Relacja
kontakt_id INT PRIMARY KEY, AUTO_INCREMENT
email VARCHAR(100)
numer_telefonu VARCHAR(15)
adres TEXT
  • Cel tabeli: przechowywanie danych kontaktowych nauczycieli.
  • Relacja: jeden do jednego z tabelą Nauczyciele.

1.7. Oceny

Kolumna Typ Klucz / Relacja
ocena_id INT PRIMARY KEY, AUTO_INCREMENT
uczen_id INT FOREIGN KEY → Uczniowie.uczen_id
przedmiot_id INT FOREIGN KEY → Przedmioty.przedmiot_id
ocena DECIMAL(3,2)
data_wystawienia DATE
  • Cel tabeli: przechowywanie ocen uczniów z różnych przedmiotów.
  • Relacje: wiele do jednego – ocena przypisana do ucznia i przedmiotu.

2. Relacje w bazie danych

2.1. Jeden do wielu

  • Klasy → Uczniowie

    • Jedna klasa może mieć wielu uczniów.
    • Nauczyciele → Klasy

    • Jeden nauczyciel może prowadzić wiele klas.

2.2. Jeden do jednego

  • Nauczyciele → DaneKontaktowe

    • Każdy nauczyciel ma jeden unikalny zestaw danych kontaktowych.

2.3. Wiele do wielu

  • Uczniowie → Przedmioty

    • Uczniowie mogą uczęszczać na wiele przedmiotów, a przedmioty mogą mieć wielu uczniów.
    • Relacja realizowana przez tabelę UczenPrzedmiot.

3. Kluczowe zasady projektowania bazy danych w tym przykładzie

Normalizacja danych

  • Dane są rozdzielone na tabele, aby uniknąć duplikacji: np. dane kontaktowe nauczycieli są w osobnej tabeli.

Integralność referencyjna

  • Wszystkie klucze obce (FOREIGN KEY) zapewniają spójność danych między tabelami.

Łatwe rozszerzanie

  • Możliwość dodawania nowych przedmiotów, uczniów czy nauczycieli bez zmian struktury istniejących tabel.

Relacje jednoznaczne

  • Jeden do wielu i jeden do jednego relacje odwzorowują rzeczywiste powiązania w szkole.

Obsługa relacji wiele do wielu

  • Tabela łącząca (UczenPrzedmiot) umożliwia przypisywanie wielu uczniów do wielu przedmiotów w sposób skalowalny.