Bazy danych 7. Postaci normalne P. F. Góra semestr letni 2004/05 http://th-www.if.uj.edu.pl/zfs/gora/ semestr letni 2004/05
Cel normalizacji – unikanie anomalii Rodzaje anomalii Redundancja Anomalie modyfikacji Anomalie usuwania Te same dane niepotrzebnie powtarzają się w kilku krotkach Wartość tej samej danej zostanie zmodyfikowana w jednej krotce, w innej zaś nie. Która wartość jest wówczas poprawna? Utrata części danych, gdy dla pewnego atrybutu zacznie obowiązywać wartość pusta (null) Odwrotność: anomalie dołączania Bazy danych - wykład 7
Pierwsza postać normalna: Tabele zawierają wyłącznie dane atomowe. Każda tabela ma klucz. Zakaz duplikowania wierszy. Tabela jest zbiorem wierszy. Bazy danych - wykład 7
Problem: Jednemu numerowi zamówienia odpowiada zbiór identyfikatorów części Bazy danych - wykład 7
Tabela w 1PN — „podzielone” niektóre wiersze. Bazy danych - wykład 7
Jest w 1PN — podzielone niektóre kolumny Nie jest w 1PN Jest w 1PN — podzielone niektóre kolumny Bazy danych - wykład 7
Druga postać normalna: Tabela jest w 1PN. Każdy atrybut niekluczowy zależy funkcyjnie od pełnego klucza. Od pełnego klucza, a nie tylko od podzbioru właściwego klucza. Każda tabela, której wszystkie klucze są jednokolumnowe, jest w 2PN. Kontynuujemy konsumpcję płazów Bazy danych - wykład 7
Redundancja: adres Seagate w czterech (sic!) krotkach. Nie jest w 2PN: nazwa dostawcy adres, id dostawcy; nazwa części id części Anomalie: Redundancja: adres Seagate w czterech (sic!) krotkach. Anomalia modyfikacji: Jeśli Seagate zmieni siedzibę, czy na pewno poprawimy to we wszystkich miejscach? Anomalia usuwania: Jeśli usuniemy zamówienie nr 002, stracimy informacjęo siedzibie Toshiby. Anomalia dołączania: Nie da się dołączyć nowej firmy, dopóki nie złożymy w niej zamówienia. Bazy danych - wykład 7
Czy to aby na pewno jest w 2PN?! Sprowadzenie do 2PN: podział tabeli Czy to aby na pewno jest w 2PN?! Bazy danych - wykład 7
Trzecia postać normalna: Tabela jest w 2PN. Jeśli A1A2…An B, to albo {A1,A2,…,An} jest nadkluczem, albo B jest elementem pewnego klucza. Dotyczy tylko zależności nietrywialnych! Bazy danych - wykład 7
Trzecia postać normalna jest postacią najczęściej występującą w praktyce. Istnieją specjalne algorytmy i specjalne narzędzia CASE do „przeprojektowywania” bazy do 3PN. W specjalistycznych zastosowaniach (np. hurtownie danych) niekiedy korzystnie jest pozostawić bazę w 2PN lub nawet 1PN. Bazy danych - wykład 7
Przykład: Tabela z trzema atrybutami i zależnościami kino miasto Często mówi się, żę 3PN wyklucza zależności przechodnie (typu AB, BC, zatem AC). Jeśli jednak C jest elementem klucza (być może obejmującego jakieś atrybuty A), to dalej jest 3PN. Przykład: Tabela z trzema atrybutami i zależnościami kino miasto tytuł miasto kino Kluczem jest {tytuł, miasto}. Innym kluczem jest {kino, tytuł}. Tabela jest w 3PN: chociaż samo kino nie jest nadkluczem, miasto jest elementem klucza. Bo każde kino jest w jakimś mieście. Bo dystrybutor ogranicza rozpowszechnianie do jednego kina w danym mieście. Zwanego „kluczem kandydującym”. Bazy danych - wykład 7
Procedura postępowania: Dany jest zbiór atrybutów, które chcemy reprezentować, i zbiór zależności funkcyjnych pomiędzy atrybutami. Znajdujemy bazę minimalną (bazy minimalne) zbioru zależności funkcyjnych. Eliminujemy symetryczne zależności funkcyjne. Dla (pewnej) bazy minimalnej sumujemy zależności funkcyjne o takich samych lewych stronach i dla każdej wysumowanej zależności tworzymy tabelę z odpowiednią lewą stroną zależności jako kluczem. Bazy danych - wykład 7
Procedura szukania bazy minimalnej: Każdy atrybut musi występować z lewej lub z prawej strony jednej zależności funkcyjnej w zbiorze. Jeśli jakaś zależność funkcyjna jest włączona do zbioru, nie wszystkie zależności funkcyjne potrzebne do jej wyprowadzenia mogą występować w tym zbiorze. Jeśli jakaś zależność funkcyjna zostaje wyłączona ze bioru, zależności funkcyjne potrzebne do jej wyprowadzenia muszą zostać doń dołączone. Bazy danych - wykład 7
Jeśli mamy wiele atrybutów i wiele zależności, normalizacji „ręcznie” przeprowadzić się nie da. Powyższa procedura jest dostosowana do projektowania „od zera”. Jeśli mamy wstępny projekt w ODL lub w postaci diagramu E/R, projektowanie jest znacznie prostsze. Bazy danych - wykład 7
Przykład Firma transportowa posiada bazę danych, w której zachodzą następujące zależności funkcyjne: NrRejestracyjny Data Kierowca NrRejestracyjny Data Odbiorca Odbiorca Odległość Kierowca Stawka Odległość Stawka Koszt Odbiorca Kierowca Koszt NrRejestracyjny Data Koszt Bazy danych - wykład 7
(NrRejestracyjny, Data, Kierowca, Odbiorca) (Kierowca, Stawka) Tabele: (NrRejestracyjny, Data, Kierowca, Odbiorca) (Kierowca, Stawka) (Odbiorca, Odległość) (Odległość, Stawka, Koszt) Bazy danych - wykład 7
Postać normalna Boyce’a-Coda (BCNF, PNBC) Tabela jest w BCNF wtedy i tylko wtedy, gdy dla każdej zależności nietrywialnej A1A2…An B, zbiór {A1,A2,…,An} jest nadkluczem Bazy danych - wykład 7
Zależności wielowartościowe Zależność wielowartościowa A1A2…An B1…Bm zachodzi wówczas, gdy wybierając z tabeli te krotki, które mają ustalone wartości typu A, zbiór wartości atrybutów typu B nie zależy od żadnych innych atrybutów, których nie ma ani w A, ani w B. Inaczej: Dla każdej pary krotek (t,u), które mają takie same wartości atrybutów typu A, można znaleźć taką krotkę v, której składowe mają wartości równe: Wartościom atrybutów typu A w ktorkach t, u; Wartościom atrybutów typu B krotki t; Wartościom tych składowych krotki u, które nie są ani typu A, ani typu B. Zależności wielowartościowa nie jest sumą zależności funkcyjnych o takich samych lewych stronach! Bazy danych - wykład 7
Czwarta postać normalna: Jeśli A1A2…An B1B2…Bm jest nietrywialną zależnością wielowartościową, to {A1,A2,…,An} jest nadkluczem. Istotne zwłaszcza dla tabel pomostowych, opisujących związki wieloargumentowe Bazy danych - wykład 7