Post-relacyjne bazy danych
Historia języka SQL 1. Sequel-XRM 2. Sequel/2 SQL 3. ANSI SQL 1986 (ISO 1987) 4. X/Open (UNIX), SAA(IBM) 5. ANSI SQL 1989 6. ANSI/ISO SQL 92 Entry level 7. ANSI SQL 92 (SQL 2) 8. ANSI SQL 93 (SQL 3) w toku 9. ANSI SQL:1999 10. SQL 4 w toku
Struktura standardu SQL3 1. SQL/Framework (WD) 2. SQL/Foundation (CD - 7.96) zapytania rekurencyjne autoryzacja dostępu (role) procedury wyzwalane (triggers) własności obiektowe 3. SQL/CLI - Call Level Interface (DIS - 7.94) 4. SQL/PSM - Persistent Storage Modules (CD - 1.94) składowane funkcje składowane procedury pakiety 5. SQL/Bindings - Host Language Bindings (WD) 6. SQL/Transaction - XA Specialization (WD) 7. SQL/Temporal 8. SQL/Objects - Extended Object (CD - 7.96) 9. SQL/VirtualTable
Własności obiektowe w SQL3 Wydział Nazwisko Adres Miasto Ulica Pracownik >>, <<, += Życiorys Języki obce Inżynier Kierownik Sekretarka Konstruktory typów modelowanie atrybutów wielowartościowych i złożonych Abstrakcyjne typy danych (metody, hermetyczność, dziedziczenie, późne wiązanie) - modelowanie nowych typów danych Typ referencyjny (identyfikatory obiektów, nawigacja między obiektami) modelowanie powiązań między obiektami Hierarchia podzbiorów modelowanie powiązań między zbiorami
Konstruktory typów SQL3 umożliwia modelowanie atrybutów złożonych i wielowartościowych za pomocą konstruktorów typu: ROW, SET, MULTISET, LIST, ARRAY; CREATE ROW TYPE Adres ( kod integer, miasto char(30), województwo char(20), gmina/dzielnica char(30), ulica char(30), numer_ulicy integer, numer_domu integer); CREATE TABLE Osoby ( nazwisko char(30), imię char(20), adresy LIST(Adres), data_urodzenia date, języki_obce SET(char 12) telefon ROW ( kierunkowy integer(2), prefiks integer(4), numer integer(7)) );
Dostęp do atrybutów złożonych SQL3 umożliwia dostęp i przetwarzanie atrybutów złożonych i wielowartościowych SELECT nazwisko, adres..miasto, adres..ulica FROM Osoby WHERE telefon..kierunkowy='61'; SELECT ITEM o.języki_obce FROM Osoby o; SELECT nazwisko FROM Osoby o WHERE 'język angielski' IN ( SELECT * FROM TABLE (o.języki_obce) j); UPDATE Osoby SET adres..ulica = "PIWNA" WHERE nazwisko = "DZIUBUTKIEWICZ"; INSERT INTO Osoby VALUES ( 'Tarzan', Jan', LIST( ROW('60-001', 'Poznań', 'Wierzbowa', 45)), SET('angielski', 'niemiecki'));
Abstrakcyjne typy danych Abstrakcyjne typy danych umożliwiają definiowanie przez użytkownika własnych typów danych. Definicja operatora obejmuje jego fizyczną strukturę i interfejs. Dla publicznych atrybutów typu system generuje automatycznie dwa typy metod: metodę observer i metodę mutator. CREATE TYPE Osoba ( PUBLIC imię varchar(15), nazwisko char(30), FUNCTION wiek (o Osoba) RETURNS interval day; BEGIN RETURN current_day - o.data_urodzenia; END; FUNCTION ustaw_wiek(o Osoba, d interval day) RETURNS Osoba; BEGIN set o.data_urodzenia = current_day - d; return o; END; PROTECTED data_urodzenia date ); System wygeneruje dla powyższego typu metody observer i mutator dla atrybutów: imię i nazwisko. FUNCTION imię (Osoba) RETURNS varchar(15) FUNCTION imię (Osoba, varchar(15)) RETURNS Osoba...
Dziedziczenie SQL3 umożliwia definiowanie nowych abstrakcyjnych typów danych za pomocą dziedziczenia własności po typach już zdefiniowanych. Mechanizm dziedziczenia pozwala na stosowanie polimorfizmu i późnego wiązania redefiniowanych metod. CREATE TYPE Pracownik UNDER Osoba ( PUBLIC etat varchar(15); płaca ROW ( płaca_zasadnicza decimal(6,2), premia decimal(6,2); nadgodziny decimal(6,2)) );
Referencyjny typ danych Referencyjny typ danych pozwala na jawne modelowanie związków między danymi. Wartościami referencyjnego typu danych są identyfikatory obiektów określonego typu. // definicja typu krotkowego CREATE ROW TYPE Podwozie ( // typ referencyjny - identyfikator obiektu id REF (Podwozie),...); CREATE TABLE Podwozia OF TYPE Podwozie (VALUES FOR id // identyfikator obiektu IS SYSTEM GENERATED); CREATE TYPE Cylinder (... ); CREATE ROW TYPE Silnik ( id REF(Silnik), Cylindry SET (Cylinder),...); CREATE TABLE Silniki OF TYPE Silnik (VALUES FOR id // identyfikator obiektu IS SYSTEM GENERATED); CREATE ROW TYPE Samochód ( id int(9), silnik REF(Silnik), // atrybut referencyjny podwozie REF (Podwozie),...); CREATE TABLE Samochody OF TYPE Samochód (SCOPE FOR podwozie IS Podwozia, SCOPE FOR silnik IS Silniki);
Nawigacja wzdłuż referencji operatory referencji i dereferencji SQL3 umożliwia wielopoziomową nawigację wzdłuż związków referencji. Operacja ta jest odpowiednikiem klasycznej operacji połączenia. SELECT id, silnik->numer, podwozie->typ FROM Samochody WHERE klasa = 'COMPACT'; UPDATE Podwozia p SET cena = 8000 WHERE REF ROW p = (//referencja pobranie identyfikatora SELECT podwozie FROM Samochody WHERE nazwa= 'SAAB95'; Operacja referencji zamienia identyfikator krotki na jego wartość. Operacja dereferencji zamienia wartość (krotkę) na jej identyfikator.
Hierarcha podzbiorów Hierarchia podzbiorów jest ortogonalna do hierarchii dziedziczenia ADT. Hierarchia ta pozwala na propagacje operacji modyfikacji danych na wszystkie podzbiory. Pracownicy Kierowcy Inżynierowie CREATE TABLE Pracownicy (...); CREATE TABLE Kierowcy UNDER Pracownicy (...); CREATE TABLE Inżynierowie UNDER Pracownicy (...);... UPDATE Pracownicy SET płaca=1.05*płaca; // inżynierowie + kierowcy + pozostali pracownicy
Masowe struktury danych i ich przetwarzanie Relacyjny model danych Schemat bazy danych Baza danych schemat relacji1 schemat relacji2 schemat relacjin relacja1 relacja2 relacjan Relacja = zbiór krotek operacja selekcji Post-relacyjny model danych Relacja = zbiór krotek
Obiektowe a relacyjne bazy danych Postęp 1. Składowanie i przetwarzanie obiektów złożonych 2. Tożsamość obiektów 3. Rozszerzalność zbioru typów danych, dziedziczenie 4. Modelowanie własności behawioralnych w bazie danych 5. Rozwiązanie problemu impedance mismatch Regres 1. Zagubienie prostoty modelu relacyjnego 2. Brak deklaratywnego języka zapytań ad-hoc 3. Efektywność przetwarzania?