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 ( pole ) 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? Integralność danych relacyjnych typ kolor KWADRAT BIAŁY TRÓJKĄT ZIELONY...... KOŁO CZARNY reguła ( mechanizm ), która gwarantuje poprawność danych istnieją dwa sposoby definiowania, sprawdzania reguł integralnościowych deklaratywne proceduralne 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 ) Klucz kandydujący w relacji R jest podzbiorem K zbioru atrybutów relacji R posiadający własność jednoznaczności i nieredukowalny zawierający więcej niż jeden atrybut nazywa się kluczem złożonym, zaś zawierający dokładnie jeden atrybut kluczem prostym W sytuacji, w której relacja posiada wiele kluczy kandydujących, jeden z nich powinien być wybrany jako klucz główny, pozostałe zaś określa się mianem kluczy alternatywnych Klucz obcy relacji R jest atrybutem lub zbiorem atrybutów, który wskazuje na klucz główny w innej relacji lub tej samej relacji Klucze na przykładzie relacji PRACOWNICY( #NR_AKT, NAZWISKO, STANOWISKO, KIEROWNIK, ID_DZIALU) relacji DZIALY(#ID_DZIALU, NAZWA, SIEDZIBA ) klucz główny relacji PRACOWNICY to NR_AKT klucz główny relacji DZIALY to ID_DZIALU 2
klucze obce w tabeli PRACOWNICY to KIEROWNIK wskazuje na klucz główny NR_AKT relacji PRACOWNICY ID_DZIAŁU wskazuje na klucz główny ID_DZIALU relacji DZIALY Integralność referencyjna zapewnia, że baza nie zawiera żadnych niedopuszczalnych wartości klucza obcego i narzuca je poprzez tzw. więzy referencyjne encji odnosi się do pojedynczej relacji ( tabeli ) w której powinien istnieć klucz główny ( PRIMARY KEY ) i żaden jego składnik nie może akceptować wartości pustej atrybutu wartości dla atrybutu są pobierane z odpowiedniej dziedziny na każdy atrybut relacji można narzucić ograniczenia dotyczące: dziedziny (określenie typu ) niepowtarzalności wartości ( UNIQUE ) wartość wymagana ( NOT NULL ) ograniczenie dziedziny warunek logiczny ( CHECK ) 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; 3
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_relacji 1>) x (<nazwa_relacji 2>) lub R x S przykład: Pełne dane o pracownikach i dzialach ( Pracownicy ) x ( Dzialy ) SELECT * FROM Pracownicy CROSS JOIN Dzialy; lub stary zapis SELECT * FROM Pracownicy, Dzialy; 4
Złączenia JOIN Theta złączenie dwóch relacji, dla dowolnego operatora theta, stanowi restrykcję wykonaną na iloczynie kartezjańskim obu relacji, dla spełnionego warunku połączenia. < nazwa_relacji 1 > <warunek połaczenia> < nazwa_relacji 2 > warunek połączenia jest postaci A i Ө B j ( theta join ) A i B j są atrybutami połączenia Domena(A i ) = Domena(B j ) Ө 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. W języku SQL 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 ) 5
Suma relacji dwóch zgodnych R i S jest w wyniku relacją zawierającą wszystkie krotki z obu relacji R S SELECT Imiona, Nazwisko FROM Studenci WHERE rok=1 UNION SELECT Imie, Nazwisko FROM Aktorzy ORDER BY 2; 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 Imiona FROM Studenci WHERE rok=1 INTERSECT SELECT upper(imie) FROM Aktorzy WHERE kraj='pl' ; 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. R - S SELECT upper(imie) FROM Aktorzy WHERE kraj='usa' MINUS SELECT Imiona FROM Studenci WHERE rok=1; Wykorzystano Wykłady dr inż. Olga Siedlecka-Lamch - Bazy danych z roku 2012 http://wazniak.mimuw.edu.pl/images/0/04/bd-2st-1.2-w02.tresc-1.1.pdf 6