Plan wykładu Bazy danych Wykład 2: Relacyjny model danych - zależności funkcyjne. Podstawy SQL. Deficja zależności funkcyjnych Klucze relacji Reguły dotyczące zależności funkcyjnych Domknięcie zbioru atrybutów Podstawy SQL Małgorzata Krętowska Wydział Informatyki Politechnika Białostocka 2 Definicja zależności funkcyjnych Zależności funkcyjne Zależność funkcyjna: A 1 A 2...A n B Interpretacja: jeśli dwie krotki relacji R są zgodne dla atrybutów A 1, A 2,.., A n (tzn. obie krotki mają takie same wartości składowych dla wymienionych atrybutów), to muszą być również zgodne w pewnym innym atrybucie B. Odczyt zapisu: A 1, A 2,..., A n określają funkcyjnie B Jeśli zbiór atrybutów A 1, A 2,..., A n określa funkcyjnie więcej niż jeden atrybut tzn. x y A A B B A 1 A 2...A n B 1 A 1 A 2...A n B 2 A 1 A 2...A n B 3 To taki zbiór zależności skrótowo przedstawiamy jako: A 1 A 2...A n B 1 B 2 B 3 Jeśli x i y są zgodne dla atrybutów A To muszą być zgodne również dla atrybutów B 3 4
Relacja Film Tytuł Rok Czas Rodzaj nazwastudia nazwiskoaktora Żurek 2003 81 Kolor Studio1 Katarzyna Kingsajz 1987 104 Kolor Studio1 Jerzy Stuhr Kingsajz 1987 104 Kolor Studio1 Katarzyna Seksmisja 1984 117 Kolor Studio2 Jerzy Stuhr Jakie zależności funkcyjne wyróżniamy w relacji Film? tytuł rok czas tytuł rok rodzaj tytuł rok nazwastudia tytuł rok czas rodzaj nazwastudia Klucze relacji Atrybut lub zbiór atrybutów {A 1, A 2,..., A n } tworzy klucz relacji, jeśli: wszystkie pozostałe atrybuty relacji są funkcyjnie zależne od tych atrybutów => nie może być sytuacji, w której dwie różne krotki relacji R były zgodne dla wszystkich atrybutów A 1, A 2,..., A n. Nie istnieje taki podzbiór właściwy zbioru {A 1, A 2,..., A n }, od którego pozostałe atrybuty relacji R są zależne funkcyjnie, tzn. klucz musi być minimalny 5 6 Tytuł Rok Czas Rodzaj nazwastudia nazwiskoaktora Żurek 2003 81 Kolor Studio1 Katarzyna Kingsajz 1987 104 Kolor Studio1 Jerzy Stuhr Kingsajz 1987 104 Kolor Studio1 Katarzyna Seksmisja 1984 117 Kolor Studio2 Jerzy Stuhr Nadklucze Nadklucz - zbiór atrybutów, który zawiera klucz Każdy klucz jest nadkluczem y nadkluczy w relacji Film: (tytuł, rok, nazwisko Aktora, czas) (tytuł, rok, nazwisko Aktora, rodzaj) Co jest kluczem relacji? Klucz: (tytuł, rok, nazwiskoaktora) Czy mogą istnieć dwie różne krotki zgodne dla powyższych atrybutów? Czy klucz jest minimalny? 7 8
Reguły dotyczące zależności funkcyjnych Zasady, które pozwalają na zastępowanie zbioru zależności funkcyjnych zbiorami równoważnymi lub na dołączanie do zbioru tych zależności, które wynikają ze zbioru początkowego. Reguła podziału Zasady podziału i łączenia Zależność funkcyjną A 1 A 2...A n B 1 B 2... B m możemy zastąpić zbiorem zależności funkcyjnych A 1 A 2...A n B i, gdzie i=1,2,...,m Wyróżniamy następujące reguły: reguła łączenia reguła podziału reguła przechodniości Reguła łączenia Zbiór zależności funkcyjnych A 1 A 2...A n B i, gdzie i=1,2,...,m możemy zastąpić pojedynczą zależnością funkcyjną A 1 A 2...A n B 1 B 2... B m 9 10 Zależności trywialne Zależność funkcyjna A 1 A 2...A n B jest trywialna, jeśli B jest równe któremuś z A tytuł rok tytuł Mówimy, że zależność A 1 A 2...A n B 1 B 2... B m jest: trywialna - jeśli zbiór złożony z atrybutów typu B jest podzbiorem zbioru atrybutów typu A nietrywialna - jeśli co najmniej jeden z atrybutów typu B znajduje się pośród atrybutów A całkowicie nietrywialna - jeśli żaden z atrybutów typu B nie znajduje się pośród atrybutów typu A Atrybuty, które występują równocześnie z prawej i lewej strony zawsze można pominąć po prawej tronie, stąd prawdziwe jest twierdzenie (reguła zależności trywialnych) Zależność funkcyjna A 1 A 2...A n B 1 B 2... B m jest równoważna zależności A 1 A 2...A n C 1 C 2... C K, gdzie C są tymi elementami z B, które nie są równe A. 11 Założenia: Domknięcie zbioru atrybutów {A 1, A 2,..., A n } - zbiór atrybutów S - zbiór zależności funkcyjnych Domknięciem zbioru {A 1, A 2,..., A n } nad zbiorem zależności S nazywamy taki zbiór atrybutów B, że jeśli pewna relacja R spełnia wszystkie zależności ze zbioru S, to spełnia także zależność A 1 A 2... A n B, a zatem zależność A 1 A 2... A n B wynika z S. Domknięcie zbioru atrybutów {A 1, A 2,..., A n } oznaczamy przez {A 1, A 2,..., A n } +. 12
Algorytm obliczania domknięcia zbioru atrybutów {A 1, A 2,..., A n } Niech X oznacza nazwę zbioru domknięcia. Na początku X= {A 1, A 2,..., A n }. Znajdujemy wszystkie zależności funkcyjne postaci B 1B 2...B m C gdzie B 1 B 2...B m należą do zbioru X, a C nie należy. Wówczas dołączamy C do zbioru X. X + Y B Nowy X + Powtarzamy krok 2 tak długo, jak długo nie będzie można dołączyć do X żadnego nowego atrybutu. Jeśli już żadnego atrybutu nie można dołączyć do X, to znaczy, że otrzymaliśmy domknięcie zbioru {A 1, A 2,..., A n } + 13 14 Atrybuty: A, B, C, D, E, F Zależności: AB C, BC AD, D E, CF B Wyznaczyć: {A,B} +. Kolejne kroki wyznaczania domknięcia: X={A, B} X={A, B, C} X={A,B,C,D} X={A,B,C,D,E} Cel Mając dane domknięcie zbioru atrybutów {A 1, A 2,..., A n } możemy sprawdzić, czy dana zależność funkcyjna wynika ze zbioru zależności S. Jeśli B należy do {A 1, A 2,..., A n } + to oznacza, że wynika z S. A 1 A 2...A n B stąd {A,B} + ={A,B,C,D,E} 15 16
Domknięcie i klucze Zbiór {A 1, A 2,..., A n } + zawiera wszystkie atrybuty relacji R wtedy i tylko wtedy, gdy elementy A 1, A 2,..., A n są nadkluczem w R. Stwierdzenie, czy atrybuty A 1, A 2,..., A n stanowią klucz relacji, może polegać na sprawdzeniu: czy wszystkie atrybuty R należą do zbioru {A 1, A 2,..., A n } + czy X + otrzymane z dowolnego X, który utworzymy przez usunięcie choćby jednego elementu spośród A 1, A 2,..., A n, nie zawiera wszystkich atrybutów R Reguła przechodniości Reguła przechodniości umożliwia kaskadowe łączenie zależności: jeśli w relacji R zachodzą zależności A 1 A 2...A n B 1 B 2... B m oraz B 1 B 2... B m C 1 C 2...C k, to w relacji R zachodzi także zależność A 1 A 2...A n C 1 C 2...C k. Uzasadnienienie powyższej reguły => wyliczenie domknięcia {A 1, A 2,..., A n } +. : Relacja Filmy(tytuł, rok, czas, rodzaj, nazwastudia, adresstudia) Uzasadnić, że kluczem jest zbiór (tytuł, rok) tytuł rok nazwastudia nazwastudia adresstudia 17 18 Baza ćwiczeniowa Zapytania proste SELECT [ALL DISTINCT] wyrażenie [[AS] alias],... FROM nazwa_tabeli,... [WHERE warunek] [ORDER BY wyrażenie ASC DESC],...]; 19 20
Zapytania proste SELECT [ALL DISTINCT] wyrażenie [[AS] alias],... FROM nazwa_tabeli,... ALL- pokazuje wszystkie wiersze (domyślny) DISTINCT - eliminuje powtarzające się wiersze wyrażenie - nazwa kolumny lub wyrażenie zawierające nazwy kolumn, zamiast wyrażenia może wystąpić znak '* oznaczający wszystkie kolumny alias - nazwa nadana wyrażeniu na liście SELECT, może mieć postać identyfikatora prostego (napis złożony z liter, cyfr i znaków podkreślenia) lub złożonego (dowolny napis ograniczony podwójnymi cudzysłowami, np. zawierający spacje), 21 Operatory logiczne: =; <; >; >=; <= Operatory SQL: Zapytania proste [WHERE warunek] BETWEEN... AND... - między dwiema wartościami (włącznie z nimi) IN (lista) - zgodnie z jednym elementów listy LIKE - zgodnie z zadanym wzorcem (interpretacja znaków typu "wildcard": % zastępuje ciąg znaków, _ zastępuje jeden znak) IS NULL - jest wartością NULL Operator negacji: NOT (NOT nazwa_kolumny =...; NOT BETWEEN; NOT IN; NOT LIKE; IS NOT NULL) Kryteria złożone: AND (i) OR (lub) 22 Złączenia tabel Wypisać nazwiska i nazwy departamentów pracowników. SELECT [ALL DISTINCT] wyrażenie [[AS] alias],... FROM tabela_1, tabela_2,..., tabela_n WHERE warunki_łączące_tabele minimalna liczba łączących warunków = liczba tabel -1 SELECT nazwisko, nazwa, p.nr_departamentu as nr_z_pr, d.nr_departamentu as nr_z_dep FROM pracownik p, departament d; NAZWISKO NAZWA NR_Z_PR NR_Z_DEP ------------- --------------- ---------- ---------- Nazwisko1 Departament 1 1 1 Nazwisko2 Departament 1 1 1 Nazwisko3 Departament 1 2 1 Nazwisko4 Departament 1 2 1 Nazwisko5 Departament 1 3 1 Nazwisko6 Departament 1 3 1 Nazwisko7 Departament 1 3 1 23 24
Wypisać nazwiska i nazwy departamentów pracowników. SELECT nazwisko, nazwa, p.nr_departamentu as nr_z_pr, d.nr_departamentu as nr_z_dep FROM pracownik p, departament d; NAZWISKO NAZWA NR_Z_PR NR_Z_DEP ------------- --------------- ---------- ---------- Nazwisko1 Departament 1 1 1 Nazwisko2 Departament 1 1 1 Nazwisko3 Departament 1 2 1 Nazwisko4 Departament 1 2 1 Nazwisko5 Departament 1 3 1 Nazwisko6 Departament 1 3 1 Nazwisko7 Departament 1 3 1 SELECT nazwisko, nazwa, p.nr_departamentu as nr_z_pr, d.nr_departamentu as nr_z_dep FROM pracownik p, departament d WHERE p.nr_departamentu=d.nr_departamentu; NAZWISKO NAZWA NR_Z_PR NR_Z_DEP ------------- --------------- ---------- ---------- Nazwisko1 Departament 1 1 1 Nazwisko9 Departament 1 1 1 Nazwisko8 Departament 1 1 1 Nazwisko14 Departament 1 1 1 Nazwisko2 Departament 1 1 1 Nazwisko13 Departament 2 2 2 Nazwisko4 Departament 2 2 2 Nazwisko3 Departament 2 2 2 Nazwisko11 Departament 2 2 2 25 Wypisać poziomy płac poszczególnych pracowników wraz z ich zarobkami SELECT nazwisko, pensja, nr_przedzialu FROM pracownik, poziom_zarobkow WHERE pensja between dolna_granica and gorna_granica; Wynik działania zapytania: NAZWISKO PENSJA NR_PRZEDZIALU ------------- ---------- ------------- Nazwisko2 900 1 Nazwisko1 1000 1 Nazwisko14 1000 1 Nazwisko8 1200 1 Nazwisko9 1400 2 Nazwisko3 1500 3 Nazwisko4 2000 3 Nazwisko13 2000 3 Nazwisko5 3000 4 Nazwisko7 3500 5 Nazwisko11 3500 5 Tabela poziom_zarobkow: NR_PRZEDZIALU DOLNA_GRANICA GORNA_GRANICA ------------- ------------- ------------- 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999 26