🎯 Cele lekcji

🔍

1. Jak czytać diagram E/R — metodyka analizy

Analiza diagramu E/R powinna przebiegać systematycznie. Oto sprawdzona metodyka:

KrokCo sprawdzamyPytania kontrolne
1. Zidentyfikuj encje Prostokąty — co system modeluje? Jakie "rzeczy" istnieją w systemie?
2. Sprawdź klucze główne Każda encja musi mieć PK Czy klucz jest unikalny i NOT NULL?
3. Przeanalizuj związki Linie między encjami i ich liczebność Co oznacza ta linia? 1:N czy M:N?
4. Sprawdź uczestnictwo Obowiązkowe vs opcjonalne Czy rekord musi/może istnieć bez powiązania?
5. Weryfikuj atrybuty Kompletność, odpowiednie typy Czy brakuje ważnych danych? Czy atrybuty są atomowe?
6. Szukaj anomalii Redundancja, naruszenia normalizacji Czy są kolumny zależne od nie-klucza?
⚠️

2. Typowe błędy projektowe

Typ błęduOpisKonsekwencjaRozwiązanie
Brak klucza głównego Tabela bez PK Niemożliwość identyfikacji wierszy, brak integralności Dodaj sztuczny INT AUTO_INCREMENT PK
Nieprawidłowa liczebność M:N bez tabeli pośredniej Niemożliwość implementacji w SQL Utwórz tabelę pośrednią z dwoma FK
Nadmiarowe atrybuty Dane powtórzone w wielu tabelach Anomalie danych, utrudniona aktualizacja Normalizuj — przenieś do osobnej tabeli
Brak FK Kolumna "id_czegoś" bez FOREIGN KEY Brak integralności referencyjnej Dodaj FOREIGN KEY + odpowiednie ON DELETE
Nieatomowe wartości Kolumna z listą np. "Laptop, Mysz" Naruszenie 1NF, utrudnione zapytania Rozbij na osobne wiersze lub tabelę
Nieodpowiedni typ danych Przechowywanie liczb jako VARCHAR Błędy obliczeń, wolne sortowanie Dobierz właściwy typ: INT, DECIMAL, DATE
🔄

3. Przekształcanie M:N na 1:N z tabelą pośrednią

Relacja M:N nie może być bezpośrednio zaimplementowana w relacyjnej bazie danych. Należy ją rozłożyć na dwie relacje 1:N przez dodanie tabeli pośredniej (junction table / bridge table).

Przed przekształceniem (M:N — tylko diagram konceptualny):

Autor
  • 🔑 id_autora
  • imie, nazwisko
>——M:N——<
Ksiazka
  • 🔑 id_ksiazki
  • tytul, isbn

Po przekształceniu (dwie relacje 1:N — implementacja SQL):

Autor
  • 🔑 id_autora
  • imie, nazwisko
1——|
autor_ksiazka
  • 🔗 id_autora (FK+PK)
  • 🔗 id_ksiazki (FK+PK)
  • rola_autora
|——1
Ksiazka
  • 🔑 id_ksiazki
  • tytul, isbn
📚

4. Przykładowy diagram: System biblioteczny

Kompletny diagram systemu bibliotecznego z encjami: Czytelnik, Wypozyczenie, Egzemplarz, Ksiazka, Autor

Czytelnik
  • 🔑 id_czytelnika
  • imie, nazwisko
  • email
  • data_rejestracji
1——<o
Wypozyczenie
  • 🔑 id_wypozyczenia
  • 🔗 id_czytelnika (FK)
  • 🔗 id_egzemplarza (FK)
  • data_wyp
  • data_zwrotu
  • data_oddania
o>——1
Egzemplarz
  • 🔑 id_egzemplarza
  • 🔗 id_ksiazki (FK)
  • sygnatura
  • stan
N——1
Ksiazka
  • 🔑 id_ksiazki
  • tytul
  • isbn
  • rok_wydania
autor_ksiazka (pośrednia)
  • 🔗 id_autora (FK+PK)
  • 🔗 id_ksiazki (FK+PK)

↑ Tabela pośrednia dla M:N Autor ↔ Ksiazka

Kluczowe obserwacje:
— Czytelnik może mieć 0 lub więcej wypożyczeń (kółko po stronie Wypozyczenie)
— Każde Wypożyczenie należy do dokładnie 1 Czytelnika (NOT NULL FK)
— Ksiazka może mieć wiele Egzemplarzy (jeden tytuł, wiele fizycznych kopii)
— Ksiazka-Autor to M:N (książka może mieć wielu autorów, autor pisze wiele książek)
✏️

Zadania interaktywne

Zadanie 1Analiza diagramu — odpowiedz na pytania

Na podstawie diagramu systemu bibliotecznego (powyżej) odpowiedz:

Ile egzemplarzy może mieć jedna książka?

  • Dokładnie jeden
  • Zero lub jeden
  • Jeden lub wiele
  • Zero lub wiele

Czy czytelnik musi mieć wypożyczenie żeby istnieć w systemie?

  • Tak — uczestnictwo obowiązkowe
  • Nie — uczestnictwo opcjonalne (może mieć 0 wypożyczeń)
Zadanie 2Wskaż błąd w schemacie

Poniżej przedstawiono tabelę z błędem projektowym:

CREATE TABLE zamowienia (
  -- brak id_zamowienia !
  data_zamowienia  DATE,
  id_klienta       INT,
  kwota_laczna     DECIMAL(10,2)
);

Jaki jest główny błąd projektowy tej tabeli?

  • Błędny typ danych dla kwoty (powinno być FLOAT)
  • Brak klucza głównego (PRIMARY KEY) — niemożna jednoznacznie zidentyfikować wierszy
  • Zła nazwa tabeli — powinno być "orders"
  • Brak kolumny ze statusem zamówienia
Zadanie 3Przekształć M:N — podaj nazwy tabel

Masz relację M:N między encjami Uczen i Zajecia (uczeń chodzi na wiele zajęć, zajęcia mają wielu uczniów). Podaj nazwy tabel, które powstaną po przekształceniu:




📌 Zapamiętaj