ZSBD OBIEKTOWO – RELACYJNE BAZY DANYCH Wykład 7 Prowadzący: dr Paweł Drozda Program wykładu Informacje ogólne Definicja danych Dziedziczenie Modelowanie związków między obiektami dr P.
Download ReportTranscript ZSBD OBIEKTOWO – RELACYJNE BAZY DANYCH Wykład 7 Prowadzący: dr Paweł Drozda Program wykładu Informacje ogólne Definicja danych Dziedziczenie Modelowanie związków między obiektami dr P.
ZSBD OBIEKTOWO – RELACYJNE BAZY DANYCH Wykład 7 Prowadzący: dr Paweł Drozda Program wykładu Informacje ogólne Definicja danych Dziedziczenie Modelowanie związków między obiektami dr P. Drozda Wprowadzenie Zaproponowane w celu rozszerzenia funkcjonalności relacyjnych baz danych Główna koncepcja – dodanie funkcjonalności obiektowych do istniejących relacyjnych DBMS Główne elementy dodane do RDBMS Procedury, funkcje Możliwość definicji nowych również złożonych typów danych Definicja obiektowych i referencyjnych typów danych Dziedziczenie, polimorfizm Standard obejmujący rozszerzenia – SQL3 dr P. Drozda Zalety Brak konieczności zmiany całego systemu relacyjnego Standard SQL3 kompatybilny z SQL2 Możliwość definiowania funkcji ogólnie dostępnych dr P. Drozda Definiowanie typu obiektów Składnia create type NazwaTypu as object (definicja danych); Przykład CREATE TYPE punkt AS OBJECT ( X float, Y float); CREATE TYPE odcinek AS OBJECT( P1 punkt, P2 punkt); CREATE TYPE tabela IS TABLE OF punkt; CREATE TYPE wielokat AS OBJECT( zbiorPunktow tabela); dr P. Drozda Metody obiektów Podobnie jak w obiektowych BD możliwość przypisania metody Deklaracja metody w nagłówku typu obiektu Deklaracja zachowania metody w ciele Przykład CREATE TYPE odcinek (p1 punkt, p2 punkt, MEMBER PROCEDURE nowyKoncowy(p punkt), MEMBER FUNCTION dlugosc RETURN FLOAT); dr P. Drozda Przykład ciąg dalszy CREATE TYPE BODY odcinek MEMBER PROCEDURE nowyKoncowy(p punkt) IS BEGIN p2:=p; END nowyKoncowy; MEMBER FUNCTION dlugosc RETURN FLOAT IS BEGIN RETURN sqrt(power(self.p1.xself.p2.x,2)+power(self.p1.y-self.p2.y,2)); END; END; dr P. Drozda Konstruktory Funkcje deklarowanie w specyfikacji typu – CONSTRUCTOR FUNCTION Nazwa funkcji taka sama jak nazwa typu Służą do określenia w jaki sposób tworzone są obiekty danego typu Parametry przekazywane tak jak w normalnych funkcjach Funkcjonalność implementowana w ciele typu Jako typ zwracany – RETURN SELF AS RESULT Przykład: CREATE TYPE kula AS OBJECT ( …, CONSTRUCTOR FUNCTION kula (promien number) RETURN SELF AS RESULT,…); dr P. Drozda Dziedziczenie Składnia CREATE TYPE nazwa UNDER rodzic (…); Przykład CREATE TYPE osoba AS OBJECT ( imie varchar2(20), nazwisko varchar2(20), dataUrodzenia date, MEMBER FUNCTION wiek RETURN number) not final; CREATE TYPE student UNDER osoba ( numerIndeksu char(6), rokStudiow number); dr P. Drozda Typy, metody abstrakcyjne Definiowane za pomocą – not instantiable Typy Nie można na ich podstawie tworzyć tabel not instantiable – po definicji całego typu Metody Tylko definicja nagłówka – bez ciała Musi zostać nadpisana w podklasie not instantiable – przed słowem member dr P. Drozda Nadpisywanie metod Za pomocą słowa overriding przed słowem member Przy wywołaniu metody – zostanie wywołana metoda nadpisująca Przykład CREATE OR REPLACE TYPE bryla AS OBJECT( Typ VARCHAR(20), NOT INSTANTIABLE MEMBER PROCEDURE skaluj (n number), NOT INSTANTIABLE MEMBER FUNCTION powierzchnia RETURN NUMBER, NOT INSTANTIABLE MEMBER FUNCTION objetosc RETURN NUMBER) NOT INSTANTIABLE NOT FINAL; dr P. Drozda Przykład ciąg dalszy CREATE OR REPLACE TYPE kula UNDER bryla( x FLOAT, y FLOAT, z FLOAT, r FLOAT, OVERRIDING MEMBER PROCEDURE skaluj (n number), OVERRIDING MEMBER FUNCTION powierzchnia RETURN NUMBER, OVERRIDING MEMBER FUNCTION objetosc RETURN NUMBER); CREATE OR REPLACE TYPE BODY kula AS OVERRIDING MEMBER PROCEDURE skaluj (n number) IS BEGIN SELF.r := self.r *n; END; OVERRIDING MEMBER FUNCTION powierzchnia RETURN NUMBER IS BEGIN RETURN 4*3.14 * self.r *self.r; END; OVERRIDING MEMBER FUNCTION objetosc RETURN NUMBER IS BEGIN RETURN 4/3*3.14*power(self.r,3); END; END; dr P. Drozda Tabele obiektów Obiekty gromadzone są w tabelach Tworzenie tabeli obiektów: CREATE TABLE nazwaTabeli OF nazwaTypuObiektu; Przykład CREATE TABLE kule OF kula; Wstawianie obiektów do tabeli INSERT INTO kule VALUES(‘kulka’,1,2,3,9); INSERT INTO kule VALUES(kula(‘pilka’,1,1,1,2)); INSERT INTO odcinki VALUES (new odcinek(new punkt(1,1), new punkt(2,2))); Obiekt otrzymuje identyfikator, który można odczytać za pomocą ref(obiekt) Odczyt wartości value(obiekt), bądź poszczególne pola, metody: obiekt.pole, obiekt.metoda Co z ALTER TABLE????? dr P. Drozda Heterogeniczne tabele Zawierają dane o różnych typach (np. tabela na podstawie typu bryły – zawiera kule i inne) Wstawianie CREATE TABLE bryly OF bryla; INSERT INTO bryly VALUES(new kula(1,1,1,2)); INSERT INTO bryly VALUES(new szescian(3)); INSERT INTO bryly VALUES(new prostopadloscian(2,3,4)); dr P. Drozda Typ danych REF Umożliwia zapisywanie wskaźników do obiektów wierszy Stosowany do określenia związku pomiędzy obiektami Wartości typu REF – identyfikatory obiektów powiązanych Związki REF jednokierunkowe (inaczej niż w obiektowych) dr P. Drozda Przykład REF CREATE TYPE nauczyciel AS OBJECT( imie VARCHAR2(20), nazwisko VARCHAR2(20)); CREATE TYPE przedmiot AS OBJECT( nazwa VARCHAR2(20), prowadzacy REF nauczyciel); CREATE TABLE profki OF nauczyciel; CREATE TABLE przedmioty OF przedmiot; Wstawianie do tabeli z referencją INSERT INTO profki VALUES (‘Stefan’,’Batory’); INSERT INTO przedmioty SELECT ‘bazy danych’, ref(p) FROM profki p WHERE imie=‘Stefan’ dr P. Drozda Związki dwustronne Zastosowanie niekompletnych definicji typów Przykład CREATE TYPE nauczyciel; CREATE TYPE lista AS TABLE OF uczen; CREATE TYPE klasa AS OBJECT ( nazwa VARCHAR2(30), wychowawca REF nauczyciel, uczniowie lista); CREATE TYPE nauczyciel AS OBJECT ( nazwisko VARCHAR2(30), wychowuje REF klasa); dr P. Drozda Związki wielowartościowe Konieczna deklaracja tabeli o dowolnej liczbie elementów zawierającej dane typu REF nazwaTypu Przykład create type student; create type listaStudentow AS TABLE OF REF student; create type przedmiot AS object( nazwa varchar2(20), grupa listaStudentow); create type listaPrzedmiotow AS TABLE OF REF przedmiot; create type student AS object( nazwisko varchar2(20), przedmioty listaPrzedmiotow ); dr P. Drozda Związki wielowartościowe w tabelach konieczne dodanie zagnieżdżonej tabeli w definicji tabeli ze związkiem wielowartościowym CREATE TABLE studenci OF student NESTED TABLE przedmioty STORE AS przed; INSERT INTO studenci VALUES(‘tomasz’,NULL); INSERT INTO przedmioty SELECT ‘bazy danych’, ListaStudentow(ref(s)) FROM studenci s; INSERT INTO studenci VALUES(‘bolek’,NULL); INSERT INTO TABLE (SELECT grupa FROM przedmioty WHERE nazwa=‘bazy danych’) (SELECT ref(s) FROM studenci s WHERE nazwisko=‘bolek’); dr P. Drozda Tworzenie zapytań Wszystkie elementy z tabeli – użycie gwiazdki odwołanie do poszczególnych kolumn – poprzez ustawienie aliasu do tabeli i odwołanie przez alias Specjalne wartości obiektów: ref(o) – identyfikator obiektu value(o) – wartość obiektu Przykład: SELECT * FROM kule; SELECT value(k), ref(k) FROM kule k; SELECT * FROM studenci WHERE nazwisko =‘bolek’; SELECT * FROM przedmioty WHERE nazwa = ‘bazy danych’; dr P. Drozda Tworzenie zapytań - cd Gdy wybieramy element z nadklasy – pokazuje nam wszystko z podklas SELECT * FROM bryly; SELECT value(b) FROM bryly b; Ograniczenie do podklasy – „IS OF” SELECT value(b) FROM bryly b WHERE value(b) IS OF (kula); Odwołanie do metod – alias.nazwaMetody SELECT b.powierzchnia(), b.objetosc() FROM bryly b; (wyniki są pokazane dla wszystkich podklas) dr P. Drozda Zapytania „nested tables”, ścieżki odwołanie do tabeli zagnieżdżonych z referencjami za pomocą COLUMN_VALUE SELECT s.COLUMN_VALUE.nazwisko FROM przedmioty p, table(p.grupa) s; odwołanie do tabeli zagnieżdżonych bez referencji – przez ścieżki (tabela wielokąty składa się z punktów) SELECT z.x FROM wielokaty w, table(w.zbiorpunktow) z; Ścieżki - poprzez kropkę odwołanie do podtypu Przykład (trójkąt złożony z 3 punktów p1,p2,p3 każdy punkt ma współrzędne x,y) SELECT t.p1.x, t.p1.y FROM trojkaty t; - wypisze współrzędne punktów p1 dla wszystkich trójkątów dr P. Drozda Modyfikacja typu ALTER TYPE nazwa opcje ADD MEMBER I CONSTRUCTOR FUNCTION|PROCEDURE – dodanie funkcji, procedury DROP MEMBER I CONSTRUCTOR FUNCTION|PROCEDURE – usunięcie metody ADD ATTRIBUTE – dodanie atrybutu (może być więcej niż 1) MODIFY ATTRIBUTE– zmiana definicji elementu DROP ATTRIBUTE – usunięcie atrybutu Parametr CASCADE – zmiany wprowadzone we wszystkich elementach do których odwołuje się dany typ Parametr INVALIDATE – zmiany niewprowadzane do elementów pochodnych dr P. Drozda Przykład ALTER TYPE student ADD ATRIBUTE rok NUMBER CASCADE; ALTER TYPE student ADD ATTRIBUTE miasto VARCHAR2(7) CASCADE; ALTER TYPE student DROP ATTRIBUTE rok CASCADE; ALTER TYPE student MODIFY ATTRIBUTE miasto VARCHAR2(70) INVALIDATE; dr P. Drozda Usuwanie typu Można usunąć tylko, gdy do niczego się nie odwołuje DROP TYPE nazwaTypu; Co zrobić gdy typy odwołują się cyklicznie? Opcja FORCE dr P. Drozda