Normalizacja bazy danych WYKŁAD Piotr Ciskowski
Normalizacja danych o proces upraszczania danych do najbardziej efektywnej postaci efektywna = prosta efektywna wydajna o rozłożenie danych w pewien logiczny, niezawierający powtórzeń sposób, umożliwiający ponowne złożenie ich w całość
Normalizacja danych o proces upraszczania danych do najbardziej efektywnej postaci o rozłożenie danych w pewien logiczny, niezawierający powtórzeń sposób, umożliwiający ponowne złożenie ich w całość Edgar Frank Codd postaci normalne: 1NF first normal form 2NF 3NF 4NF 5NF BCNF Boyce-Codd normal form 6NF DKNF domain-key normal form
Normalizacja danych o proces upraszczania danych do najbardziej efektywnej postaci o rozłożenie danych w pewien logiczny, niezawierający powtórzeń sposób, umożliwiający ponowne złożenie ich w całość Edgar Frank Codd zagnieżdżane większość baz 3NF
Normalizacja danych o zanim zaczniemy każda tabela opisuje jedną encję wszystkie wiersze są unikalne i zawierają klucz podstawowy kolejność kolumn i wierszy nie ma znaczenia
1NF 1 POSTAĆ NORMALNA
1NF - pierwsza postać normalna o każda encja ma swój klucz główny o każdy klucz główny może mieć tylko jedną wartość, a nie zbiór wartości o baza nie zawiera powtarzających się grup
1NF - pierwsza postać normalna przykład studio nagraniowe - dane o wykonawcach i albumach Johnson, Jones. Modelowanie danych w SQL Server 2005 i 2008 baza z powtarzającymi się grupami: wykonawca gatunek album data wydania albumu The Awkward Stage rock Home 10.01.2006 Girth metal On the Sea 13.12.1997 Wasabi Peanuts country Spicy Legumes 11.08.2005 The Bobby Jenkins Band r&b Live! 07.03.1985 Running the Game 10.11.1988 Juices of Brazil latin jazz Long Road 01.01.2003 White 06.10.2005
1NF - pierwsza postać normalna baza bez powtarzających się grup rozwiązanie 1 niezbyt dobre: wykonawca gatunek album 1 data wydania albumu 1 album 2 data wydania albumu 2 The Awkward Stage rock Home 10.01.2006 NULL NULL Girth metal On the Sea 13.12.1997 NULL NULL Wasabi Peanuts country Spicy Legumes 11.08.2005 NULL NULL The Bobby Jenkins Band r&b Live! 07.03.1985 Running the Game 10.11.1988 Juices of Brazil latin jazz Long Road 01.01.2003 White 06.10.2005
1NF - pierwsza postać normalna baza bez powtarzających się grup rozwiązanie 2 lepsze: Albumy album data wydania wykonawca Home 10.01.2006 The Awkward Stage On the Sea 13.12.1997 Girth Spicy Legumes 11.08.2005 Wasabi Penuts Live! 07.03.1985 The Bobby Jenkins Band Running the Game 10.11.1988 The Bobby Jenkins Band Long Road 01.01.2003 Juices of Brazil White 06.10.2005 Juices of Brazil Wykonawcy wykonawca The Awkward Stage Girth Wasabi Peanuts The Bobby Jenkins Band Juices of Brazil gatunek rock metal country r&b latin jazz
2NF 2 POSTAĆ NORMALNA
2NF - druga postać normalna o 1 NF + o eliminacja zależności częściowych = wszystkie atrybuty niekluczowe mają być funkcyjnie zależne od całego klucza głównego
2NF - druga postać normalna przykład studio nagraniowe - dane o wykonawcach i albumach Johnson, Jones. Modelowanie danych w SQL Server 2005 i 2008 każdy wykonawca nagrywa tylko w jednym gatunku: Wykonawcy wykonawca The Awkward Stage Girth Wasabi Peanuts The Bobby Jenkins Band Juices of Brazil gatunek rock metal country r&b latin jazz
2NF - druga postać normalna rozwiązanie 1 - wykonawca nagrywa w kilku gatunkach: Wykonawcy wykonawca The Awkward Stage Girth Wasabi Peanuts The Bobby Jenkins Band The Bobby Jenkins Band Juices of Brazil Juices of Brazil gatunek rock metal country r&b soul latin jazz world beat
2NF - druga postać normalna rozwiązanie 1 - wykonawca nagrywa w kilku gatunkach + dane agenta niezgodne z 2NF: Wykonawcy wykonawca gatunek agent data podpisania główny tel. agenta The Awkward Stage rock Jan Nieznany 10.09.2005 (777) 555-1234 NULL dodatkowy tel. agenta Girth metal Stefan Sześciopak 31.10.1997 (777) 555-6789 (777) 555-0000 Wasabi Peanuts country Jan Nieznany 01.01.2005 (777) 555-1234 NULL The Bobby Jenkins Band r&b Johnny Jenkins 15.01.1985 (777) 555-1111 NULL The Bobby Jenkins Band soul Johnny Jenkins 25.07.1987 (777) 555-1111 NULL Juices of Brazil latin jazz Joanna Nieznana 01.06.2001 (777) 555-1235 (777) 555-9999 Juices of Brazil world beat Joanna Nieznana 01.08.2003 (777) 555-1235 (777) 555-9999
2NF - druga postać normalna rozwiązanie 1 - wykonawca nagrywa w kilku gatunkach + dane agenta zgodne z 2NF: - rozwiązanie oryginalne Wykonawcy wykonawca gatunek data podpisania The Awkward Stage rock 10.09.2005 Girth metal 31.10.1997 Wasabi Peanuts country 01.01.2005 The Bobby Jenkins Band r&b 15.01.1985 The Bobby Jenkins Band soul 25.07.1987 Juices of Brazil latin jazz 01.06.2001 Juices of Brazil worldagent beat 01.08.2003 Agenci wykonawca główny tel. agenta Jan Nieznany The Awckward Stage (777) 555-1234 NULL dodatkowy tel. agenta Stefan Sześciopak Girth (777) 555-6789 (777) 555-0000 Johnny Jenkins The Bobby Jenkins Band (777) 555-1111 NULL Joanna Nieznana Juices of Brazil (777) 555-1235 (777) 555-9999
2NF - druga postać normalna rozwiązanie 1 - wykonawca nagrywa w kilku gatunkach + dane agenta zgodne z 2NF: - rozwiązanie moje Wykonawcy wykonawca agent data podpisania The Awkward Stage Jan Nieznany 10.09.2005 Girth Stefan Sześciopak 31.10.1997 Wasabi Peanuts Jan Nieznany 01.01.2005 The Bobby Jenkins Band Johnny Jenkins 15.01.1985 Juices of Brazil Joanna Nieznana 01.06.2001 Agenci agent główny tel. agenta dodatkowy tel. agenta Jan Nieznany (777) 555-1234 NULL Stefan Sześciopak (777) 555-6789 (777) 555-0000 Johnny Jenkins (777) 555-1111 NULL Joanna Nieznana (777) 555-1235 (777) 555-9999
3NF 3 POSTAĆ NORMALNA
3NF - trzecia postać normalna o 3 NF 2 NF + eliminacja zależności przejściowych = żadne atrybuty niekluczowe nie zależą od innych atrybutów niekluczowych
3NF - trzecia postać normalna 1 NF: istnieje klucz 2 NF: eliminacja zależności częściowych 3 NF: eliminacja zależności przejściowych Klucz, cały klucz i tylko klucz Tak mi dopomóź, Codd
3NF - trzecia postać normalna rozwiązanie 1 - wykonawca nagrywa w kilku gatunkach + dane agenta zgodne z 2NF i z 3NF: Wykonawcy wykonawca gatunek data podpisania The Awkward Stage rock 10.09.2005 Girth metal 31.10.1997 Wasabi Peanuts country 01.01.2005 The Bobby Jenkins Band r&b 15.01.1985 The Bobby Jenkins Band soul 25.07.1987 Juices of Brazil latin jazz 01.06.2001 Agenci Juices of Brazil worldagent beat 01.08.2003 wykonawca główny tel. agenta dodatkowy tel. agenta Jan Nieznany The Awckward Stage (777) 555-1234 NULL Stefan Sześciopak Girth (777) 555-6789 (777) 555-0000 Johnny Jenkins The Bobby Jenkins Band (777) 555-1111 NULL Joanna Nieznana Juices of Brazil (777) 555-1235 (777) 555-9999
przykład studio nagraniowe - dane o wykonawcach i albumach Johnson, Jones. Modelowanie danych w SQL Server 2005 i 2008 lepsze pomysły?...
Normalizacja danych czy każdy atrybut zależy całkowicie od klucza głównego? czy każdy atrybut zależy jedynie od klucza głównego? czy w encji istnieje tylko jeden kandydat na klucz główny? nie wydzielić encję
DENORMALIZACJA
DeNormalizacja danych o działania odwrotne do normalizacji usprawiedliwienia: duże bazy, dużo relacji, wiele zapytań aplikacje raportujące ostateczny krok identyfikacja postaci normalnych ewentualna denormalizacja
Przykład: MODEL SPRZEDAŻY
przykład: model sprzedaży Vieira klient dzwoni lub przychodzi do firmy i rozmawia z pracownikiem, który następnie przyjmuje zamówienie tabela Orders: Orders OrderNo OrderDate CustomerNo CustomerName CustomerAddress ItemsOrdered
przykład: model sprzedaży Vieira 1NF: eliminacja powtarzających się grup danych zagwarantowanie niepodzielności danych Orders OrderNo OrderDate CustomerNo CustomerName CustomerAddress ItemsOrdered
przykład: model sprzedaży Vieira 1NF: eliminacja powtarzających się grup danych zagwarantowanie niepodzielności danych Orders OrderNo OrderDate CustomerNo CustomerName CustomerAddress ItemsOrdered 100 01-01-1999 54545 ACME Co. 1234 1st St. 5-1A4536, Flange, 6lbs, $75; 4-OR2400, Injector, 0.5lbs, $108; 4-OR2403, Injector, 0.5lbs, $116; 1-4I5436, Head, 3lbs, $750 101 01-01-1999 12000 Sneed Corp. 555 Main Awe. 1-3X9567, Pump, 5lbs, $62,50 102 01-01-1999 66651 ZZZ * Corp. 4242 SW 2nd 7-8G9200, Fan, 3lbs, $84; 1-8G5437, Fan, 3lbs, $15; 1-3H6250, Control, 5lbs, $32 103 01-02-1999 54545 ACME Co. 1234 1st. St. 40-8G9200, Fan, 3lbs, $480; 1-2P5523, Housing, 1lbs, $165; 1-3X9567, Pump, 5lbs, $42
przykład: model sprzedaży Vieira 1NF: eliminacja powtarzających się grup danych zagwarantowanie niepodzielności danych Orders OrderNo OrderDate CustomerNo ItemsOrdered 100 01-01-1999 54545 5-1A4536, Flange, 6lbs, $75; 4-OR2400, Injector, 0.5lbs, $108; 4-OR2403, Injector, 0.5lbs, $116; 1-4I5436, Head, 3lbs, $750 101 01-01-1999 12000 1-3X9567, Pump, 5lbs, $62,50 102 01-01-1999 66651 7-8G9200, Fan, 3lbs, $84; 1-8G5437, Fan, 3lbs, $15; 1-3H6250, Control, 5lbs, $32 103 01-02-1999 54545 40-8G9200, Customers Fan, 3lbs, $480; 1-2P5523, CustomerNo Housing, 1lbs, $165; CustomerName CustomerAddress 1-3X9567, Pump, 54545 5lbs, $42 ACME Co. 1234 1st St. 12000 Sneed Corp. 555 Main Awe. 66651 ZZZ * Corp. 4242 SW 2nd 54545 ACME Co. 1234 1st. St.
przykład: model sprzedaży Vieira 1NF: eliminacja powtarzających się grup danych zagwarantowanie niepodzielności danych Orders OrderNo OrderDate CustomerNo ItemsOrdered 100 01-01-1999 54545 5-1A4536, Flange, 6lbs, $75; 4-OR2400, Injector, 0.5lbs, $108; 4-OR2403, Injector, 0.5lbs, $116; 1-4I5436, Head, 3lbs, $750 101 01-01-1999 12000 1-3X9567, Pump, 5lbs, $62,50 102 01-01-1999 66651 7-8G9200, Fan, 3lbs, $84; 1-8G5437, Fan, 3lbs, $15; 1-3H6250, Control, 5lbs, $32 103 01-02-1999 54545 40-8G9200, Fan, 3lbs, $480; 1-2P5523, Housing, 1lbs, $165; 1-3X9567, Pump, 5lbs, $42
przykład: model sprzedaży Vieira 1NF: eliminacja powtarzających się grup danych zagwarantowanie niepodzielności danych - rozdzielenie danych Orders OrderNo OrderDate CustomerNo PartNo Description Qty UnitPrice TotalPrice Weight 100 01-01-1999 54545 5-1A4536 Flange 5 15,0 75,0 6 100 01-01-1999 54545 4-OR2400 Injector 4 27,0 108,0 0,5 100 01-01-1999 54545 4-OR2403 Injector 4 29,0 116,0 0,5 100 01-01-1999 54545 1-4I5436 Head 1 750,0 750,0 3 101 01-01-1999 12000 1-3X9567 Pump 1 62,5 62,5 5 102 01-01-1999 66651 7-8G9200 Fan 7 12,0 84,0 3 102 01-01-1999 66651 1-8G5437 Fan 1 15,0 15,0 3 102 01-01-1999 66651 1-3H6250 Control 1 32,0 32,0 5 103 01-02-1999 54545 40-8G9200 Fan 40 12,0 480,0 3 103 01-02-1999 54545 1-2P5523 Housing 1 165,0 165,0 1 103 01-02-1999 54545 1-3X9567 Pump 1 42,0 42,0 5
przykład: model sprzedaży Vieira Orders OrderNo 1NF: eliminacja powtarzających się grup danych zagwarantowanie niepodzielności danych - rozdzielenie danych - poprawienie klucza głównego LineItem OrderDate CustomerNo PartNo Description Qty UnitPrice TotalPrice Weight 100 1 01-01-1999 54545 5-1A4536 Flange 5 15,0 75,0 6 100 2 01-01-1999 54545 4-OR2400 Injector 4 27,0 108,0 0,5 100 3 01-01-1999 54545 4-OR2403 Injector 4 29,0 116,0 0,5 100 4 01-01-1999 54545 1-4I5436 Head 1 750,0 750,0 3 101 1 01-01-1999 12000 1-3X9567 Pump 1 62,5 62,5 5 102 1 01-01-1999 66651 7-8G9200 Fan 7 12,0 84,0 3 102 2 01-01-1999 66651 1-8G5437 Fan 1 15,0 15,0 3 102 3 01-01-1999 66651 1-3H6250 Control 1 32,0 32,0 5 103 1 01-02-1999 54545 40-8G9200 Fan 40 12,0 480,0 3 103 2 01-02-1999 54545 1-2P5523 Housing 1 165,0 165,0 1 103 3 01-02-1999 54545 1-3X9567 Pump 1 42,0 42,0 5
przykład: model sprzedaży Vieira Orders OrderNo 1NF - OK eliminacja powtarzających się grup danych zagwarantowanie niepodzielności danych - rozdzielenie danych - poprawienie klucza głównego LineItem OrderDate CustomerNo PartNo Description Qty UnitPrice TotalPrice Weight 100 1 01-01-1999 54545 5-1A4536 Flange 5 15,0 75,0 6 100 2 01-01-1999 54545 4-OR2400 Injector 4 27,0 108,0 0,5 100 3 01-01-1999 54545 4-OR2403 Injector 4 29,0 116,0 0,5 100 4 01-01-1999 54545 1-4I5436 Head 1 750,0 750,0 3 101 1 01-01-1999 12000 1-3X9567 Pump 1 62,5 62,5 5 102 1 01-01-1999 66651 7-8G9200 Fan 7 12,0 84,0 3 102 2 01-01-1999 66651 1-8G5437 Customers Fan 1 15,0 15,0 3 102 3 01-01-1999 66651 1-3H6250 CustomerNo Control CustomerName 1 32,0 CustomerAddress 32,0 5 103 1 01-02-1999 54545 40-8G9200 Fan 54545ACME Co. 40 12,0 1234 1st 480,0 St. 3 103 2 01-02-1999 54545 1-2P5523 Housing 12000Sneed Corp. 1 165,0 555 Main 165,0 Awe. 1 103 3 01-02-1999 54545 1-3X9567 Pump 66651 ZZZ * Corp. 1 42,0 4242 SW 42,0 2nd 5 54545ACME Co. 1234 1st. St.
przykład: model sprzedaży Vieira 2NF: każda kolumna musi zależeć od całego klucza Orders OrderNo LineItem OrderDate CustomerNo PartNo Description Qty UnitPrice TotalPrice Weight 100 1 01-01-1999 54545 5-1A4536 Flange 5 15,0 75,0 6 100 2 01-01-1999 54545 4-OR2400 Injector 4 27,0 108,0 0,5 100 3 01-01-1999 54545 4-OR2403 Injector 4 29,0 116,0 0,5 100 4 01-01-1999 54545 1-4I5436 Head 1 750,0 750,0 3 101 1 01-01-1999 12000 1-3X9567 Pump 1 62,5 62,5 5 102 1 01-01-1999 66651 7-8G9200 Fan 7 12,0 84,0 3 102 2 01-01-1999 66651 1-8G5437 Fan 1 15,0 15,0 3 102 3 01-01-1999 66651 1-3H6250 Control 1 32,0 32,0 5 103 1 01-02-1999 54545 40-8G9200 Fan 40 12,0 480,0 3 103 2 01-02-1999 54545 1-2P5523 Housing 1 165,0 165,0 1 103 3 01-02-1999 54545 1-3X9567 Pump 1 42,0 42,0 5
przykład: model sprzedaży Vieira 2NF: OrdersDetails OrderNo LineItem każda kolumna musi zależeć od całego klucza PartNo Description Qty UnitPrice TotalPrice Weight 100 1 5-1A4536 Flange 5 15,0 75,0 6 100 2 4-OR2400 Injector 4 27,0 108,0 0,5 100 3 4-OR2403 Injector 4 29,0 116,0 0,5 100 4 1-4I5436 Head 1 750,0 750,0 3 101 1 1-3X9567 Pump 1 62,5 62,5 5 102 1 7-8G9200 Fan 7 12,0 84,0 3 102 2 1-8G5437 Fan 1 15,0 15,0 3 102 3 1-3H6250 Control 1 32,0 32,0 5 103 1 40-8G9200 Fan 40 12,0 480,0 3 103 2 1-2P5523 Housing 1 165,0 165,0 1 103 3 1-3X9567 Pump 1 42,0 42,0 5
przykład: model sprzedaży Vieira 2NF - OK OrdersDetails OrderNo LineItem każda kolumna musi zależeć od całego klucza PartNo Description Qty UnitPrice TotalPrice Weight 100 1 5-1A4536 Flange 5 15,0 75,0 6 100 2 4-OR2400 Injector 4 27,0 108,0 0,5 100 3 4-OR2403 Injector 4 29,0 116,0 0,5 100 4 1-4I5436 Head 1 750,0 750,0 3 101 1 1-3X9567 Pump 1 62,5 62,5 5 102 1 7-8G9200 Fan 7 12,0 84,0 3 102 2 1-8G5437 Fan 1 15,0 Orders 15,0 3 102 3 1-3H6250 Control 1 32,0 OrderNo 32,0 5 OrderDate CustomerNo 103 1 40-8G9200 Fan 40 12,0 480,0 3 103 2 1-2P5523 Housing 1 165,0 165,0 100 1 01-01-1999 54545 103 3 1-3X9567 Pump 1 42,0 101 42,0 5 01-01-1999 12000 102 01-01-1999 66651 103 01-02-1999 54545
przykład: model sprzedaży Vieira 3NF: OrdersDetails OrderNo LineItem żadna kolumna nie może zależeć od żadnej innej kolumny nie będącej kluczem tabela nie może zawierać wyliczonych danych PartNo Description Qty UnitPrice TotalPrice Weight 100 1 5-1A4536 Flange 5 15,0 75,0 6 100 2 4-OR2400 Injector 4 27,0 108,0 0,5 100 3 4-OR2403 Injector 4 29,0 116,0 0,5 100 4 1-4I5436 Head 1 750,0 750,0 3 101 1 1-3X9567 Pump 1 62,5 62,5 5 102 1 7-8G9200 Fan 7 12,0 84,0 3 102 2 1-8G5437 Fan 1 15,0 15,0 3 102 3 1-3H6250 Control 1 32,0 32,0 5 103 1 40-8G9200 Fan 40 12,0 480,0 3 103 2 1-2P5523 Housing 1 165,0 165,0 1 103 3 1-3X9567 Pump 1 42,0 42,0 5
przykład: model sprzedaży Vieira 3NF: żadna kolumna nie może zależeć od żadnej innej kolumny nie będącej kluczem tabela nie może zawierać wyliczonych danych OrdersDetails OrderNo LineItem PartNo Qty UnitPrice TotalPrice 100 1 5-1A4536 5 15,0 75,0 100 2 4-OR2400 4 27,0 108,0 100 3 4-OR2403 4 29,0 116,0 100 4 1-4I5436 1 750,0 750,0 101 1 1-3X9567 1 62,5 62,5 102 1 7-8G9200 7 12,0 84,0 102 2 1-8G5437 1 15,0 15,0 102 3 1-3H6250 1 32,0 32,0 103 1 40-8G9200 40 12,0 480,0 103 2 1-2P5523 1 165,0 165,0 103 3 1-3X9567 1 42,0 42,0 Products PartNo Description Weight 5-1A4536 Flange 6 4-OR2400 Injector 0,5 4-OR2403 Injector 0,5 1-4I5436 Head 3 1-3X9567 Pump 5 7-8G9200 Fan 3 1-8G5437 Fan 3 1-3H6250 Control 5 40-8G9200 Fan 3 1-2P5523 Housing 1 1-3X9567 Pump 5
przykład: model sprzedaży Vieira klient dzwoni lub przychodzi do firmy i rozmawia z pracownikiem, który następnie przyjmuje zamówienie 3NF: żadna kolumna nie może zależeć od żadnej innej kolumny nie będącej kluczem tabela nie może zawierać wyliczonych danych WHERE TotalPrice > $100 WHERE Qty*ListPrice > $100 OrdersDetails OrderNo LineItem PartNo Qty ListPrice TotalPrice 100 1 5-1A4536 5 13,5 67,5 100 2 4-OR2400 4 24,3 97,2 100 3 4-OR2403 4 26,1 104,4 100 4 1-4I5436 1 675,0 675,0 101 1 1-3X9567 1 56,3 56,3 102 1 7-8G9200 7 10,8 75,6 102 2 1-8G5437 1 13,5 13,5 102 3 1-3H6250 1 28,8 28,8 103 1 40-8G9200 40 10,8 432,0 103 2 1-2P5523 1 148,5 148,5