Model relacyjny został zaproponowany do strukturyzacji danych przez brytyjskiego matematyka Edgarda Franka Codda w 1970 r. Baza danych według definicji Codda to zbiór zmieniających się w czasie relacji [...] o określonych stopniach. artykuł A Relational Model Of Data for Large Shared Data Banks To sposób prezentacji oraz manipulowania danymi, dotyczący: struktury danych jako relacje integralności danych zachowanej poprzez klucze główne, obce, zawężenie dziedziny, unikalność, ograniczenie wartości pustych operowania danymi poprzez selekcję, projekcję, złączenia i operacje na zbiorach Obiekty relacyjne Relacja R tabela Krotka t wiersz ( rekord ) Atrybut A kolumna Stopień relacji n liczba atrybutów Klucz główny K jednoznaczny identyfikator wiersza Dziedzina D zbiór dopuszczalnych wartości danego atrybutu Schemat relacji R( A 1, A 2,...,A n ) Baza danych zbiór relacji Relacja o schemacie R( A 1, A 2,...,A n ) na zbiorze dziedzin { D 1, D 2,...,D n } jest zbiorem krotek r = { t 1, t 2,...,t n } postaci t = < v 1, v 2,...,v n >, gdzie v i, dla 0< i n należy do zbioru D i { NULL }, n jest stopniem relacji R, m jej liczebnością Własności obiektów relacyjnych: nie istnieją powtarzające się krotki krotki nie są uporządkowane ( ich kolejność nie ma znaczenia ) wartości atrybutów są atomowe w ramach relacji atrybuty posiadają jednoznaczne identyfikatory ( nazwy ) w ramach bazy danych relacje nazwane mają jednoznaczne identyfikatory (nazwy) przykład: relacja FIGURY ( typ, kolor ) zbiór dopuszczalnych wartości dla atrybutu typ { KOŁO, KWADRAT, TRÓJKĄT } zbiór dopuszczalnych wartości dla atrybutu kolor { BIAŁY, CZERWONY, ZIELONY, CZARNY } 1
możliwe krotki relacji FIGURY ile krotek może mieć relacja FIGURY? typ kolor KWADRAT BIAŁY TRÓJKĄT ZIELONY...... KOŁO CZARNY Integralność danych relacyjnych reguła ( mechanizm ), która gwarantuje poprawność danych ( weryfikuje SZBD ) definiuje się na poziomie atrybutu lub relacji rodzaje to: klucz główny ( PRIMARY KEY ) klucz obcy ( FOREIGN KEY ) unikalność ( UNIQUE ) ograniczenie dziedziny ( CHECK ) wartość pusta/niepusta ( NULL/NOT NULL ) Podstawowe operacje algebry relacyjnej restrykcja ( selekcja ) rzutowanie ( projekcja ) złączenie iloczyn kartezjański theta złączenie operacje na zbiorach suma część wspólna ( przecięcie ) różnica Restrykcja ( poziomy podzbiór relacji poprzez podanie warunku na wybór krotek ) daje w wyniku relację składającą się ze wszystkich krotek, które spełniają określone warunki σ <warunek selekcji> (<nazwa_relacji>) przykład: Pełne dane o pracownikach z działu 10 σ <id_dzialu=10> ( Pracownicy ) SELECT * FROM Pracownicy WHERE id_dzialu=10; 2
Rzutowanie ( pionowy podzbiór relacji poprzez wskazanie tworzących go atrybutów ) to ograniczenie relacji do wskazanych atrybutów π < lista atrybutów> (<nazwa_relacji>) przykład: lista nazwisk i płac z relacji Pracownicy π < nazwisko, placa> ( Pracownicy) SELECT nazwisko, placa FROM Pracownicy; Złożenie operacji rzutowania i restrykcji przykład:lista nazwisk i płac pracowników z działu 10 z relacji Pracownicy π < nazwisko, placa> (σ <id_dzialu=10> ( Pracownicy) ) SELECT nazwisko, placa FROM Pracownicy WHERE id_dzialu=10; Iloczyn kartezjański dwóch relacji; R ( o stopniu n r i liczebności m r ) oraz relacji S ( o stopniu n s i liczebności m s ) jest wynikową relacją o stopniu n r + n s i liczebności m r * m s zawierającą konkatenację wszystkich krotek należących do relacji R z wszystkimi krotkami należącymi do relacji S, (<nazwa_relacji1>) x (<nazwa_relacji 2>) lub R x S przykład: Pełne dane o pracownikach i działach ( Pracownicy ) x ( Dzialy ) SELECT * FROM Pracownicy CROSS JOIN Dzialy; lub stary zapis SELECT * FROM Pracownicy, Dzialy; 3
Złączenia JOIN Theta złączenie dwóch relacji R i S, dla dowolnego operatora porównania theta, stanowi restrykcję wykonaną na iloczynie kartezjańskim obu relacji, dla spełnionego warunku A R Ө B s, gdzie A R należy do zbioru atrybutów relacji R, zaś B s do relacji S < nazwa_relacji1 > <warunek połaczenia> < nazwa_relacji2> Ө jest jednym z operatorów { =, <>, <, <=, >, >= } Wśród theta złączeń wyróżniamy równościowe, nierównościowe, zwrotne przykład: nazwiska pracowników i nazwy działów w których są zatrudnieni π nazwisko, nazwa ( (pracownicy id_dzialu = id_dzialu dzialy) ) SELECT nazwisko, nazwa FROM Pracownicy JOIN Dzialy ON ( Pracownicy.id_dzialu = Dzialy.id_dzialu ); lub SELECT nazwisko, nazwa FROM Pracownicy JOIN Dzialy USING( id_dzialu); lub stary zapis SELECT nazwisko, nazwa FROM Pracownicy, Dzialy WHERE pracownicy.id_dzialu = dzialy.id_dzialu; Naturalne złączenia dwóch relacji R i S ( posiadający podzbiór o tych samych nazwach i typach atrybutów ), stanowi restrykcję wykonaną na iloczynie kartezjańskim obu relacji, dla wszystkich Ar = As, gdzie Ar należy do zbioru atrybutów relacji R, zaś As do relacji S. SELECT * FROM Pracownicy NATURAL JOIN Dzialy; Operacje na zbiorach Operacje sumy, przecięcia i różnicy dla dwóch relacji będą wykonalne jeśli występuje kompatybilność tych relacji ( w obu relacjach mamy po n-atrybutów ) 4
Suma relacji dwóch zgodnych R i S jest w wyniku relacją zawierającą wszystkie krotki z obu relacji R S SELECT stanowisko FROM Pracownicy WHERE id_dzialu = 20 UNION SELECT stanowisko FROM Pracownicy WHERE id_dzialu =30; Przecięcie ( iloczyn ) dwóch zgodnych relacji R i S jest w wyniku relacją zawierającą wszystkie krotki wspólne należące zarówno do relacji R jak i do S R S SELECT stanowisko FROM Pracownicy WHERE id_dzialu = 20 INTERSECT SELECT stanowisko FROM Pracownicy WHERE id_dzialu = 30; Różnica dwóch relacji wynikiem tej operacji, oznaczonej przez R S jest relacja zawierająca wszystkie krotki, które występują w R i nie występują w S. SELECT stanowisko FROM pracownicy WHERE id_dzialu=30 MINUS SELECT stanowisko FROM pracownicy WHERE id_dzialu IN (40,50,60); Algebra relacji umożliwia tworzenie dowolnie złożonych wyrażeń przez zastosowanie operatorów dla danych( wejściowych ) relacji albo wyników pośrednich Lista możliwych zastosowań takich wyrażeń: wyszukiwanie danych aktualizacja danych definiowanie o relacji wirtualnych ( perspektyw, migawek ) o zasad bezpieczeństwa ( autoryzacji ) o wymagań stabilności (współbieżnego przetwarzania ) o reguł integralności danych 5
Wartość NULL ( nieznana ) może dotyczyć każdego typu danych: liczb, tekstów ( o skończonej liczbie znaków ), dat i typów multimedialnych nie jest to wartość ZERO dla liczb, czy łańcuch spacji dla tekstów, po prostu NULL podstawowe wartości logiczne prawda, fałsz zostają rozszerzone o trzecią wartość UNKNOWN tabela wartości dla operatora OR OR TRUE FALSE NULL TRUE TRUE TRUE TRUE FALSE TRUE FALSE NULL NULL TRUE NULL NULL tabela wartości dla operatora AND AND TRUE FALSE NULL TRUE TRUE FALSE NULL FALSE FALSE FALSE FALSE NULL NULL FALSE NULL tabela wartości dla operatora NOT NOT TRUE FALSE NULL FALSE TRUE NULL specjalne operatory do budowania warunków logicznych w wyszukiwaniu wartości pustych IS NULL ; IS NOT NULL Przykłady: SELECT nazwisko FROM Studenci WHERE gr_dziekan IS NULL ; SELECT Count( * ) FROM Studenci WHERE rok IS NOT NULL ; pułapki ; działania arytmetyczne z udziałem wartości NULL wynik wyrażenia ( 10 + NULL ) to NULL funkcje konwersji wartości NULL w Oracle Nvl ( arg1, arg2 ) jeśli wartość arg1 jest NULL to funkcja przyjmuje wartość arg2 6
Przykład: SELECT nazwa, count (nr_akt ), sum(placa + nvl( dod_funkcyjny, 0) ) FROM Pracownicy FULL JOIN Dzialy USING ( id_dzialu ) GROUP BY nazwa ; błędne ( nieskuteczne) zapisy warunków logicznych SELECT * FROM Pracownicy WHERE dod_funkcyjny <> NULL; Postulaty Codd'a dla relacyjnej bazy danych (1985 ) 1. Postulat informacyjny 2. Postulat dostępu 3. Postulat wartości NULL 4. Postulat słownika danych 5. Postulat pełnego języka danych 6. Postulat modyfikowania danych przez perspektywę 7. Postulat modyfikowania danych na wysokim poziomie abstrakcji 8. Fizyczna niezależność danych 9. Logiczna niezależność danych 10. Niezależność więzów spójności 11. Niezależność dystrybucyjna 12. Zabezpieczenie przed operacjami na niższych poziomach abstrakcji 7