Plan wykładu azy danych Wykład 7: Sprowadzanie do postaci normalnych. DDL, DML Przykład sprowadzenia nieznormalizowanej relacji do 3NF SQL instrukcja EXISTS DDL DML (insert) Małgorzata Krtowska Katedra Oprogramowania e-mail: mmac@ii.pb.bialystok.pl azy danych (studia dzienne) 2 Pierwsza posta normalna Relacja jest w pierwszej postaci normalnej, jeli kada warto atrybutu w kadej krotce tej relacji jest wartoci atomow Druga posta normalna Pełna zaleno funkcyjna trybut relacji r jest w pełni funkcyjnie zalezny od zbioru atrybutów X, jeli jest funkcyjnie zaleny od niego, ale nie jest funkcyjnie zalezny od adnego podzbioru zbioru X. Dana relacja jest w drugiej postaci normalnej, jeli kady atrybut tej relacji nie wchodzcy w skład adnego klucza jest w pełni funkcyjnie zaleny od wszystkich kluczy tej relacji. W celu uzyskania drugiej postaci normalnej naley podzieli relacj na zbiór takich relacji, których wszystkie atrybuty bd w pełni funkcyjnie zalene od kluczy. azy danych (studia dzienne) 3 azy danych (studia dzienne) 4
Trzecia posta normalna Dana relacja jest w trzeciej postaci normalnej, jeli jest ona w drugiej postaci normalnej i kady jej atrybut nie wchodzcy w skład adnego klucza nie jest przechodnio funkcyjnie zaleny od adnego klucza tej relacji. Przechodnia zaleno funkcyjna Zalenoci funkcyjne dwóch relacji w 3NF Posta nieznormalizowana; struktury danych nie s dwuwymiarowe Pierwsza posta normalna Przekształcenie do 1PN Usunicie danych nieelementarnych Relacja R D azy danych (studia dzienne) 5 azy danych (studia dzienne) 6 Druga posta normalna Trzecia posta normalna klucz D Przekształcenie do 2PN D Przekształcenie do 3PN Usunicie niepełnej zalenoci funkcyjnej Usunicie przechodniej zalenoci funkcyjnej azy danych (studia dzienne) 7 azy danych (studia dzienne) 8
SQL Operator EXISTS Operator EXISTS Tworzenie relacji Modyfikowanie relacji Wstawianie wierszy do tabel W przypadku zapyta skorelowanych czasami nie interesuje nas wynik zapytania, ale jedynie czy wiersz o zadanych przez nas warunkach istnieje. Wówczas wykorzystujemy operator EXISTS. EXISTS (podzapytanie) - zwraca true jeeli podzapytanie zwróci przynajmniej jeden wiersz NOT EXISTS(podzapytanie) zwraca true jeeli podzapytanie nie zwróci adnego wiersza azy danych (studia dzienne) 9 azy danych (studia dzienne) 10 Tworzenie tabel RETE TLE nazwa_tabeli (kolumna1 typ_danych(rozmiar) [DEFULT warto_domylna] [NULL NOT NULL] [ONSTRINT nazwa_ogr] ograniczenie_atr], kolumna2 typ_danych(rozmiar) [DEFULT warto_domylna] [NULL NOT NULL] [ONSTRINT nazwa_ogr] ograniczenie_atr...); Typy kolumn char(rozmiar) - ciag znaków stałej długoci. Rozmiar (liczba znaków) okrelany w nawiasach o długoci nie wikszej ni 255 bajtów. varchar2(rozmiar) - cig znaków zmiennej długoci. Rozmiar (liczba znaków, max 2000, domylnie 1) okrelany jest w nawiasach. number(rozmiar) - typ numeryczny. Rozmiar okrela liczb cyfr w kolumnie. number(rozmiar,d) - typ numeryczny. Rozmiar okrela liczb znaków w kolumnie, "d" okrela maksymalna ilo cyfr na prawo od kropki dziesitnej. Skala "d" nie moe by wiksza od precyzji "rozmiar" date do reprezentacji dat i czasu long rozszerzenie typu varchar2, które pozwala przechowywa napisy do 2G azy danych (studia dzienne) 11 azy danych (studia dzienne) 12
Klauzula ONSTRINT Słuy do definiowania innych ni NOT NULL warunków integralnoci RETE TLE nazwa_tabeli (kolumna1 typ_danych(rozmiar) [DEFULT warto_domylna] [NULL NOT NULL] [ONSTRINT nazwa_ogr] ograniczenie_atr]...); RETE TLE nazwa_tabeli (kolumna1 typ_danych(rozmiar) [DEFULT warto_domylna] [NULL NOT NULL] ONSTRINT nazwa_ogr typ_ograniczenia ONSTRINT nazwa_ogr typ_ograniczenia...); Klauzula ONSTRINT [ONSTRINT nazwa_ogr] typ_ograniczenia Nazwa_ograniczenia - identyfikator warunku integralnoc, wystepujcy np.. W kumunikatach o błdach spowodowanych przez niedozwolon operacj naruszajc to ograniczenia Typ_ograniczenia: HEK, PRIMRY_KEY, UNIQUE, FOREIGN_KEY Ograniczenie - dodatkowe informacje m jego posta zaley od typu ograniczenia azy danych (studia dzienne) 13 azy danych (studia dzienne) 14 Typy ogranicze Ograniczenie HEK - okrela warunek, jaki musi spełnia warto w kolumnie kadgo wiersza tabeli. Jeli wizy s definiowane po definicjji wszystkich kolumn, warunek moe dotyczy kilku kolumn, jeli na poziomie kolumny - tylko tej kolumny. ONSTRINT HEK (warunek logiczny) Warunek logiczny musi by prosty - niedopuszczalne s podzapytania, ani funkcje, których warto zaley od okolicznoci wywołania np. SYSDTE. Mona uywa OR i ND. PRIMRY_KEY Definiuje klucz główny tabeli (wymusza automatycznie warunek NOT NULL). Jeeli klucz główny stanowi pojedyncza kolumna wygodnie jest zapisa ten warunek w składni przy kolumnie:... Kolumna typ ONSTRINT nazwa_ogr PRIMRY KEY, Jeeli klucz składa si z dwóch lub wicej kolumn, wtedy naley okreli go w składni po kolumnach:. ONSTRINT nazwa_ogr PRIMTY KEY (kol1,kol2,...).. azy danych (studia dzienne) 15 azy danych (studia dzienne) 16
UNIQUE Definiuje klucz unikalny tabeli. Klucz unikalny pełni podobn rol co klucz główny, z tym, e nie wymusza automatycznie warunku NOT NULL na nalezcych do niego kolumnach Klucz unikalny składajcy si z jednej kolumny:... Kolumna typ ONSTRINT nazwa_ogr UNIQUE, Klucz dla dwóch lub wikszej liczby kolumn:. ONSTRINT nazwa_ogr PRIMTY KEY (kol1,kol2,...).. FOREIGN KEY Definiuje klucz obcy, reprezentujacy zwizek z inn tabel. Powoduje, e wartoci wskazanychkolumn mog przyjmowa jedynie wartoci klucza głównego (lub unikalnego) pewnej (najczciej innej) tabeli. Jeeli klucz obcy stanowi jedna kolumna:... Kolumna typ ONSTRINT nazwa_ogr REFERENES nazwa tabeli kolumna1, Jeeli klucz obcy zbudowany jest z wikszej liczby kolumn. ONSTRINT nazwa_ogr FOREIGN KEY lista_kolumn1 REFERENES nazwa_tabeli lista_kolumn2.. azy danych (studia dzienne) 17 azy danych (studia dzienne) 18 FOREIGN KEY by moliwe było zdefiniowanie klucza obcego: tabela do której odnosi si klucz musi by utworzona na wskazanym zestawie kolumn musi by utworzony klucz główny lub klucz unikalny jeli w tabeli obcej odwołujemy si do kolumn z klucza głównego, list kolumn z tabeli obcej mona pomin Własnoci kluczy obcych w tabeli z kluczem obcym nie mona wstawi wiersza, którego warto w kolumnie z klucza obcego nie ma odpowiedników w tabeli obcej, w tabeli z kluczem obcym nie mona zmodyfikowa wiersza, tak aby jego warto kolumnie z klucza obcego nie miał odpowiedników w tabeli obcej, z tabeli obcej nie mona usun wiersza, do którego odnosz si jakiekolwiek wiersze z tabeli z kluczem obcym - wstawienie dyrektywy ON DELETE SDE spowoduje, e przy usuwaniu wiersza z tabeli bd usuwane wszystkie odwołujce si do niego wiersze z tabel z kluczem obcym. Klauzula DEFULT Słuy do wskazania jaka warto ma by wstawiona w polu kolumny jeli w poleceniu wstawiania nie okrelono wartoci tej kolumny.... Kolumna typ DEFULT wyraenie, Podane wyraenie musi by zgodne z typem kolumny. Wyraenie musi by proste, nie mog wystpowa podzapytania Dozwolone s funkcje typu SYSDTE. azy danych (studia dzienne) 19 azy danych (studia dzienne) 20
Tworzenie tabeli przez zapytanie RETE TLE nazwa_tabeli [nazwa_kolumny [NULL/NOT_NULL],] S SELET zapytanie nowa tabela składa si z kolumn oraz wierszy okrelonych poleceniem SELET jeli pozycje wystpujce na licie SELET maj prawidłowe nazwy (nie s to wyraenia) lub majaliasy, lista nazw kolumn nowej tabeli moe zosta pominita jeli podana jest lista nazw nowej tabeli, liczba pozycji musi si pokrywa z liczb pozycji, wystpujcych po poleceniu SELET Zmiana definicji tabeli Dodawanie kolumn Zmiana definicji tabeli: LTER TLE Dodawanie kolumn: LTER TLE nazwa_tabeli DD (kolumna typ [(rozmiar)], kolumna typ [(rozmiar)],...); azy danych (studia dzienne) 21 azy danych (studia dzienne) 22 Zmiana definicji tabeli Zarzdzanie wizami integralnoci Dodawanie wizów integralnoci: LTER TLE nazwa_tabeli DD (ONSTRINT nazwa_ogr [warunek])...); Włczanie i wyłczanie sprawdzanie wizów integralnoci: LTER TLE nazwa_tabeli ENLE ONSTRINT nazwa_ogr; LTER TLE nazwa_tabeli DISLE ONSTRINT nazwa_ogr; Usuwanie warunku integralnoci: LTER TLE nazwa_tabeli DROP ONSTRINT nazwa_ogr; Modyfikacja definicji kolumny LTER TLE nazwa_tabeli MODIFY (kolumna typ [(rozmiar)] [NULL NOT NULL]); Nie mona wykona nastpujacych modyfikacji: kolumny, w której wystpuj wartoci null nie mona przedefiniowa z NULL na NOT NULL nie mona dodanowej kolumny o własnoci NOT NULL (chyba, e tabela jest pusta). Dopiero po wpisacniu wartoci kolumny mona j zmodyfikowa. Nie jest moliwe zmniejszenie rozmiaru kolumny lub zmiany jej typu, chyba, e kolumna jest pusta nie jest moliwa zmiana typu kolumny azy danych (studia dzienne) 23 azy danych (studia dzienne) 24
Usuwanie tabel DROP TLE nazwa_tabeli; usunicie tabeli powoduje utrat wszystkich danych zawartych w tabeli oraz wszystkich indeksów tabela moe zosta usunita przez jej właciciela albo administratora bazy danych jeeli istnoiej tabele z kluczami obcymi odwołujcymi si do usuwanej tabeli, usuwanie si nie powiedzie, chyba, e na kocu dodamy dyrektyw SDE ONSTRINS. Wtedy zostan usunite odpowiednie definicje kluczy obcych w innych tabelach. Zmiana nazwy tabeli RENME stara_nazwa TO nowa_nazwa azy danych (studia dzienne) 25 azy danych (studia dzienne) 26 Wstawianie wierszy Polecenie wstawiania nowych wierszy do tabeli: INSERT INTO nazwa_tabeli [(lista_kolumn)] VLUES (lista_waroci);) Wstawianie wierszy wybieranych w zapytaniu: INSERT INTO nazwa_tabeli [(lista_kolumn)] SELET lista_wyrae FROM; azy danych (studia dzienne) 27