Analiza diagramu E/R powinna przebiegać systematycznie. Oto sprawdzona metodyka:
| Krok | Co sprawdzamy | Pytania 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? |
| Typ błędu | Opis | Konsekwencja | Rozwią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 |
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).
Kompletny diagram systemu bibliotecznego z encjami: Czytelnik, Wypozyczenie, Egzemplarz, Ksiazka, Autor
↑ Tabela pośrednia dla M:N Autor ↔ Ksiazka
Na podstawie diagramu systemu bibliotecznego (powyżej) odpowiedz:
Ile egzemplarzy może mieć jedna książka?
Czy czytelnik musi mieć wypożyczenie żeby istnieć w systemie?
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?
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: