250 likes | 408 Views
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. Wprowadzenie. Zaproponowane w celu rozszerzenia funkcjonalności relacyjnych baz danych
E N D
ZsbdObiektowo – 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 createtypeNazwaTypu 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.x-self.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 (promiennumber) 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 overridingprzed 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 createtype student; create type listaStudentow AS TABLE OF REF student; createtype przedmiot AS object( nazwa varchar2(20), grupa listaStudentow); createtypelistaPrzedmiotow AS TABLE OF REF przedmiot; createtype 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