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_idtworzy 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.
- Jeden do jednego z tabelą DaneKontaktowe (unikalny
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 |
| 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.