Bazy danych 4. Algebra relacji P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ semestr letni 2006/07
Relacyjne języki zapytań (Relational Query Languages) Pozwalają na manipulacje danymi i pobieranie danych z bazy Mają mocne podstawy teoretyczne (algebra relacji!) Pozwalają na znaczną optymalizację Nie są zwykłymi językami programowania, przeznaczonymi do skomplikowanych obliczeń Pozwalają użytkownikom zdefiniować co chcą osiągnąć, nie zaś jak to trzeba obliczyć (Non-operational, declarative) Choć w w praktyce na ogół zawierają pokaźny zestaw „niebazodanowych” funkcji Bazy danych - wykład 4
Schematy tabel wejściowych zapytania są ustalone. Zrozumienie algebry relacji jest konieczne dla zrozumienia i prawidłowego posługiwania się SQL Zapytania odnoszą się do wystąpień (instancji) tabel. Wynikiem zapytań też są wystąpienia (instancje) tabel. Schematy tabel wejściowych zapytania są ustalone. Schematy tabel wyjściowych zapytania są określone przez definicje języka zapytań. Zapytanie odnosi się do konkretnego wystąpienia tabeli (lub tabel) o ustalonym schemacie. Bazy danych - wykład 4
Przykładowe wsytąpienia tabel w pewnej bazie Rezerwacje R1 Żeglarze S1 Łódki B1 Żeglarze S2 Anglojęzyczna wersja tego przykładu jest dostępna w co najmniej dwu niezależnych miejscach w sieci… Bazy danych - wykład 4
Nie jest to podstawowa operacja, ale bardzo użyteczny „skrót” Podstawowe operacje Działania teoriomnogościowe: Suma mnogościowa (unia) Przecięcie (iloczyn) zbiorów Różnica zbiorów Iloczyn kartezjański Rzutowanie Selekcja Przemianowanie Złączenie Dzielenie / Nie jest to podstawowa operacja, ale bardzo użyteczny „skrót” Technicznie rzecz biorąc, to też nie jest podstawowa operacja, ale występuje w praktyce tak często, że jest osobno implementowana Wynikiem każdej operacji jest tabela (relacja), można więc tworzyć operacje złożone. Algebra relacji jest domknięta! Bazy danych - wykład 4
Operacje teoriomnogościowe Schematy obu tabel (relacji) wejściowych muszą mieć identyczne zbiory atrybutów Zanim zostanie obliczona suma mnogościowa, przecięcie lub różnica zbiorów, należy uporządkować atrybuty obu tabel tak, aby kolejnośc atrybutów była taka sama. Bazy danych - wykład 4
Ponieważ jest to zbiór, kolejność krotek nie ma znaczenia. Suma mnogościowa R S — zbiór krotek, z których każda należy do R lub do S (lub do obu jednocześnie) S1 S2 Ponieważ jest to zbiór, kolejność krotek nie ma znaczenia. Bazy danych - wykład 4
Przecięcie mnogościowe R S — zbiór krotek, z których każda należy jednocześnie do R i S S1 S2 Różnica mnogościowa R - S — zbiór tych krotek z R, które nie należą do S S1 – S2 Bazy danych - wykład 4
Uwaga na wielozbiory! Tabele (relacje) w modelu relacyjny powinny być zbiorami (krotki nie mogą się powtarzać), ale niekiedy nie są — jeśli dopuszczamy powtórzenia krotek, czyli zbiory zastępujemy wielozbiorami, zmieniają się definicje operacji mnogościowych. Suma R S — krotka w wyniku występuje tyle razy, ile występuje w R plus tyle razy, ile występuje w S. Uwaga: jeśli nawet R i S są zbiorami, R S może być wielozbiorem! Iloczyn R S — krotka w wyniku występuje tyle razy, ile wynosi minimum jej wystąpień w R i S. Różnica R–S — krotka w wyniku występuje tyle razy, ile występuje ona w R minus tyle razy, ile występuje ona w S, ale nie mniej niż 0 razy. Bazy danych - wykład 4
Przykład: R = {A,B,B}, S = {A,B,C,C} R S = {A,A,B,B,B,C,C} R S = {A,B} R–S = {B} Bazy danych - wykład 4
Uwaga na wielozbiory (cd)! Tabele (relacje) w modelu relacyjny powinny być zbiorami (krotki nie mogą się powtarzać), ale niekiedy nie są. W dobrze zaprojektowanej relacyjnej bazie danych tabele muszą być zbiorami. Kiedy mogą pojawiać się wielozbiory? Wielozbiory w dobrze zaprojektowanych relacyjnych bazach danych pojawiają się (i to dość często) jako tabele wynikowe pewnych zapytań. Tabele te mogą być tabelami wejściowymi kolejnych zapytań… Bazy danych - wykład 4
Selekcja C(R) Wybierz z tabeli R tylko te wiersze, które spełniają warunek wyboru C. W warunku wyboru mogą pojawiać się operatory logiczne! Schemat wyjściowej relacji jest taki sam, jak relacje wejściowej. Jeśli R jest zbiorem, nie ma duplikatów. W praktyce duplikaty niekiedy się pojawiają W SQL rozróżnienie SELECT vs SELECT DISTINCT. Bazy danych - wykład 4
Wybierz tylko te wiersze z tabeli S2, dla których Rating > 8 Przykład Wybierz tylko te wiersze z tabeli S2, dla których Rating > 8 S2 Rating > 8(S2) Bazy danych - wykład 4
Rzutowanie A1,A2,…(R) Utwórz nową relację, która zawiera tylko te kolumny relacji R, które wymienione są na liście rzutowania A1,A2,… Schemat rejacji wyjściowej zawiera tylko kolumny występujące na liście rzutowania. W formalizmie matematycznym operator rzutowania eliminuje duplikaty W praktyce (SQL) eliminowania duplikatów trzeba zażądać explicite. Bazy danych - wykład 4
Wybierz tylko kolumny Imię, Rating z tabeli S2 Przykład S2 Imię,Rating(S2) Wybierz tylko kolumny Imię, Rating z tabeli S2 Wiek(S2) Usunięto duplikaty! Bazy danych - wykład 4
Składanie operatorów S2 Imię,Rating (Rating > 8(S2)) Relacja wyjściowa jednego zapytania może stać się relacją wejściową kolejnego zapytania — powstaje operator złożony. S2 Imię,Rating (Rating > 8(S2)) Bazy danych - wykład 4
Przemianowanie S(A1,A2,…,An)(R) W wyniku operacji S(A1,A2,…,An)(R) z relacji R otrzymujemy relację S, mającą tyle samo atrybutów, co R. Nowymi nazwami atrybutów stają się A1, A2, …, An. Kolejność atrybutów zostaje zachowana. Jeśli chcemy tylko zmienić nazwę samej relacji, bez zmiany nazw atrybutów, piszemy S(R) . Bazy danych - wykład 4
Jak zapamiętać te oznaczenia? — sigma — select — pi — project — rho — rename Bazy danych - wykład 4
Iloczyn kartezjański S1 R1 R S — każda krotka (wiersz) z R zostaje połączona z każdą krotką (wierszem) S Schemat wyniku ma po jednym atrybucie (kolmnie) na każdy atrybut R i po jednym atrybucie na każdy atrybut S. Nazwy atrybutów są, o ile to możliwe, dziedziczone. S1 R1 Konflikt między nazwami kolumn, który trzeba rozwiązać przez przemianowanie Bazy danych - wykład 4
Złączenie warunkowe (złączenie theta) Z iloczynu kartezjańskiego R S wybieramy tylko te krotki, które spełniają warunek C. (Na ogół) mniej krotek niż w iloczynie kartezjańskim. Schemat wyniku taki, jak schemat iloczynu kartezjańskiego. Bazy danych - wykład 4
Złączenie równościowe (equi-join) Złączenie warunkowe, w którym warunek C zawiera same równości. Schemat wyniku podobny do schematu iloczynu kartezjańskiego, ale zawiera tylko jedno wystąpienie każdej kolumny, dla której zażądano równości. Złączenie naturalne — złączenie równościowe, dla którego zażądano równości we wszystkich wspólnych kolumnach. Bazy danych - wykład 4
Ważna uwaga Złączenie jest definiowane jako podzbiór iloczynu kartezjańskiego tabel. Nie oznacza to jednak, że złączenie jest w praktyce realizowane przez RDBMS w ten sposób, iż najpierw tworzy się iloczyn kartezjański, a później wybiera z niego krotki spełniające warunek złączenia. Bazy danych - wykład 4
Dzielenie Nie jest prymitywem, ale jest użyteczne w zapytaniach typu Znajdź żeglarzy, którzy zarezerwowali wszystkie łódki. Niech A ma dwa pola, x, y, i niech B ma tylko jedno pole y: A/B = czyli A/B zawiera wszystkie krotki x (żeglarzy) takie, że każdej krotce y (łódce) z B odpowiada krotka xy w A. Lub też: Jeśli zbiór wartości y (łódek), stowarzyszonych z wartością x (żeglarz) w A, zawiera wszystkie wartości y z B, x należy do A/B. Tak x, jak i y, mogą obejmować więcej niż jedno pole. Bazy danych - wykład 4
Przykłady dzielenia B1 B2 B3 A/B1 A/B2 A/B3 A Bazy danych - wykład 4
Wyrażanie A/B poprzez podstawowe operatory Idea: W celu obliczenia A/B, znajdźmy wszystkie wartości x, które nie są „wykluczone” przez jakieś y B. x jest „wykluczone”, jeśli po dołączeniu y dostaniemy krotkę xyA „Wykluczone” wartości x: A/B: „wykluczone” wartości x Bazy danych - wykład 4
Znajdź imiona żeglarzy, którzy zarezerwowali łódkę nr 103 Rozw. 1: Rozw. 2: Rozw. 3: Bazy danych - wykład 4
Podsumowanie Model relacyjny ma ściśłe, formalnie zdefiniowane reguły zadawania zapytań, proste, ale potężne. Algebra relacji jest bardzo użyteczna do reprezentowania planów wykonania zapytań. Jedno zapytanie zazwyczaj można zrealizować na kilka sposobów. Optymalizator dobrego RDBMS powinien wybrać sposób najlepszy, ale niekiedy trzeba to zrobić ręcznie. Bazy danych - wykład 4