OBIEKTOWOŚĆ W BAZIE DANYCH ORACLE Monika Kruk Mariusz Grabowski Informatyka Stosowana WFiIS, AGH 13 grudzień 2006
Plan prezentacji kilka słów o bazie danych ORACLE rzecz o obiektach ORACLE tworzenie typów obiektowych metody i ich rodzaje manipulowanie obiektami tabele obiektowe referencje WPROWADZENIE OBIEKTY W PRAKTYCE PODSTAWY dziedziczenie modyfikacje typów widoki obiektowe kolekcje przydatne funkcje i operatory dostępne interfejsy OBIEKTY W PRAKTYCE DLA WTAJEMNICZONYCH 2
Dostępne wersje WPROWADZENIE CPUs RAM Rozmiar BD Ceny USD Wybrane parametry Express Edition 1 1 GB 4 GB Darmowa Oracle SQL Developer; native XML Standard Edition ONE 2 OS Max Bez limitu 149 /user 4995 /proc Server Managed Backup and Recovery Standard Edition 4 OS Max Bez limitu 300 /user 15000 /proc Real Application Clusters Enterprise Edition Bez limitu OS Max Bez limitu 800 /user 40000 /proc OLAP, Data Mining Opcje Data Guard 3
Słów kilka... WPROWADZENIE relacyjny system baz danych funkcjonalność: hurtownie danych, data mining, rozszerzenie obiektowe, wsparcie dla zewnętrznych aplikacji, xml... Ze strony www.oracle.com: Najpopularniejsza baza na świecie. Baza danych Oracle pozwala na znaczne obniżenie kosztów. Jest sprzedawana po nizszej cenie niż bazy SQL Server i DB2. Co więcej, pozwala na wyeliminowanie ukrytych kosztów zwiazanych z przestojami i naruszeniami bezpieczeństwa. Baza Oracle jest niezawodna i niedostępna dla hakerów. Użytkowanie pakietów aplikacji na paltformie bazodanowej Oracle kosztuje o połowę mniej niż w przypadku bazy SQL Server. Początkowy koszt zakupu SQL Servera jest niższy, jednak koszty licencji, wdrożenia, bieżącej eksploatacji bazy Oracle przypadające na użytkownika są niższe średnio o 43%. Koszty zabezpieczenia środowiska w przeliczeniu na użytkownika wynoszą 13 USD dla bazy Oracle, a 53 USD dla bazy firmy Microsoft. 4
Rzecz o obiektach WPROWADZENIE typy definiowane przez użytkownika warstwa abstrakcji na technologię relacyjną Zalety: pełne wsparcie dla aplikacji zorientowanych obiektowo obiekty są przechowywane w bazie danych - dostępność dla każdej aplikacji łatwość reprezentowania złożonych struktur danych obiekty jako przedtawiciele relacji wiele do wielu (np. faktura i produkty) typy obiektowe zawierają funkcje i procedury pozwalające na manipulowanie nimi 5
Tworzenie typu PODSTAWY CREATE TYPE person_typ AS OBJECT ( idno NUMBER, name VARCHAR2(30), phone VARCHAR2(20)); / 6
Metody PODSTAWY CREATE TYPE person_typ AS OBJECT ( idno NUMBER, name VARCHAR2(30), phone VARCHAR2(20), MAP MEMBER FUNCTION get_idno RETURN NUMBER, STATIC FUNCTION show_super(person_obj in person_typ) RETURN VARCHAR2, MEMBER FUNCTION show RETURN VARCHAR2) NOT FINAL; / 7
Rodzaje metod PODSTAWY i. metody składowe (member methods) dostęp do składowych (atrybutów) obiektu parametr SELF - wskazuje na konkretną instancję ii. metody do porównywania obiektów metody odwzorowujące (map methods) - mapowanie na oś metody porządkujace (order methods) - porównanie dwóch obiektów UWAGA: może istanieć tylko jedna z nich iii. metody statyczne STATIC przed definicją metody brak SELF - dotyczy klasy obiektów 8 iv. konstruktor tworzenie obiektu - tworzy instancję z podanych parametrów generowany automatycznie
Ciała metod PODSTAWY CREATE OR REPLACE TYPE BODY person_typ AS MAP MEMBER FUNCTION get_idno RETURN NUMBER IS BEGIN RETURN idno; END; funkcja statyczna może być wywoływana przez typy pochodne STATIC FUNCTION show_super (person_obj in person_typ) RETURN VARCHAR2 IS BEGIN RETURN 'Id: ' TO_CHAR(person_obj.idno) ', Name: ' person_obj.name; END; może być przedefiniowana przez typ pochodny MEMBER FUNCTION show RETURN VARCHAR2 IS BEGIN RETURN person_typ.show_super ( SELF ); END; END; / 9
Tabele obiektowe PODSTAWY OBIEKTY JAKO WIERSZE TABELI tworzymy tabelę obiektową CREATE TABLE person_obj_table OF person_typ; wstawiamy obiekt INSERT INTO person_obj_table VALUES (person_typ(12, 'Bob Jones', '111 555 1212')); 10
Dziedziczenie CREATE TYPE student_typ UNDER person_typ( dept_id NUMBER, major VARCHAR2(30), OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2) NOT FINAL; / FINAL / NOT FINAL typy - na końcu definicji metody - na początku definicji, przed nazwą 11
Dziedziczenie TYP ABSTRAKCYJNY CREATE TYPE address_typ AS OBJECT(...) NOT INSTANTIABLE NOT FINAL; INSTANTIABLE / NOT INSTANTIABLE typy - na końcu definicji metody - na początku definicji, przed nazwą jeśli nie podamy to wymagana definicja metody, nawet jeżeli typ jest abstrakcyjny jesli podamy to typ też musi być abstrakcyjny 12
Dziedziczenie PRZEŁADOWANIE METOD CREATE OR REPLACE TYPE BODY student_typ AS OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2 IS BEGIN RETURN person_typ.show_super ( SELF ) ' Major: ' major ; END; END; / 13
Dziedziczenie POLIMORFIZM IS OF operator pozwalający na rozpoznanie typu obiektu najniższego w hierarchii dziedziczenia SELECT * FROM figure_tab p WHERE VALUE(p) IS OF (rectangle_typ) TREAT funkcja umożliwiająca rzutowanie w dół SELECT TREAT(VALUE(p) AS rectangle_typ) FROM figure_tab WHERE VALUE(p) IS OF (rectangle_typ) 14
Modyfikacje ALTER TYPE modyfikacja składowych typu zmiana na abstrakcyjny ALTER TYPE person_typ NOT INSTANTIABLE; dodawanie/usuwanie/modyfikacja atrybutów i metod zmiana właściwości typu - FINAL i INSTANTIABLE 15
Tabele obiektowe c.d. 16 row object tabela jednokolumnowa -> wiersze to obiekty OID - identyfikator obiektu (automatycznie nadawany) CREATE TABLE person_tab OF person_typ; column object tabela wielokolumnowa -> obiekt jako kolumna CREATE TABLE contacts_table ( contact person_typ, contact_date DATE ); INSERT INTO contacts_table VALUES ( person_typ(51,'joe Lane','1 800 555'), '24 Jun 2003');
Referencje OID identyfikator obiektu wierszowego REF logiczny wskaźnik do obiektowych wierszy umożliwia stworzenie relacji pomiędzy obiektami różnych typów umożliwia tworzenie relacji jeden do wielu prosty przykład: manager - wielu podwładnych DEREF operator umożliwiający dostęp do obiektu wskazywanego przez REF 17
Referencje 18 tworzymy typ reprezentujący osobę zatrudnioną CREATE TYPE emp_person_typ AS OBJECT ( name VARCHAR2(30), manager REF emp_person_typ ); / tworzymy tabelę obiektową CREATE TABLE emp_person_obj_table OF emp_person_typ; wstawiamy dane pracownika będącego menagerem więc REF ustawiany na NULL. INSERT INTO emp_person_obj_table VALUES ( emp_person_typ ('John Smith', NULL)); ustawiamy REF managera Smitha dla pracownika Boba Jones'a INSERT INTO emp_person_obj_table SELECT emp_person_typ ('Bob Jones', REF(e)) FROM emp_person_obj_table e WHERE e.name = 'John Smith'; tworzymy tabelę obiektową SELECT c.name, DEREF(c.manager).name FROM emp_person_obj_table c;
Widoki obiektowe umożliwiają używanie obiektowo - relacyjnego charakteru bazy dla istniejących tabel relacyjnych Jak tworzyć? definiujemy typ obiektowy, którego atrybuty odpowiadają kolumnom w relacyjnej tabeli piszemy SELECT określający w jaki sposób będą pobierane elementy z relacyjnej tabeli (kolejność w zapytaniu powinna odpowiadać kolejności parametrów w stworzonym obiekcie) wyróżniamy jedną wartość (najczęściej klucz podstawowy), który umożliwi nam tworzenie REF'ów 19
Kolekcje TABLICA JAKO ATRYBUT TYPU 20 VARRAY zmienna długość zdefiniowany max rozmiar efektywne wykorzystanie przestrzeni bazy danych zbiór uporządkowany zbudowana z obiektów jakiegoś typu używana jeżeli będziemy pobierać jej całą zawartość podczas manipulacji obiektem NESTED TABLE tablica zagnieżdżona brak max rozmiaru zbiór nieuporządkowany używana jeżeli chcemy wyciągać pojedyncze elementy z tablicy
Kolekcje 21 tworzymy typ będący tablicą o zmiennej długości CREATE TYPE email_list_arr AS VARRAY(10) OF VARCHAR2(80); / tworzymy typ będący tablicą osób CREATE TYPE people_typ AS TABLE OF person_typ; / tworzymy tabelę zawierająca zagnieżdżoną tablicę CREATE TABLE department_persons ( dept_no NUMBER PRIMARY KEY, dept_name CHAR(20), dept_mgr person_typ DEFAULT person_typ(10,'john Doe',NULL), dept_emps people_typ DEFAULT people_typ() ) NESTED TABLE dept_emps STORE AS dept_emps_tab;
Kolekcje ODCZYTYWANIE przedstawia zbiór z tabeli w postaci konstruktorów SELECT d.dept_emps FROM department_persons d; rozwija listę SELECT e.* FROM department_persons d, TABLE(d.dept_emps) e; 22
Funkcje i operatory CAST() Konwertuje typ lub kolekcję typów na inny typ/kolekcję sys_typeid() Metoda zwraca typ obiektu (ostatni w hierarchii dziedziczenia), do którego należy obiekt podany jako parametr wywołania VALUE() Pobiera alias tabeli obiektowej i zwraca instancje obiektu będącego wierszem 23
Dostępne API Java : JDBC (od wersji 2.0 wsparcie dla typów użytkownika); SQLJ (możliwe dwa sposoby mapowania obiektów: silne typy implementują interfejs oracle.sql.oradata słabe klasa oracle.sql.struct obiekty; oracle.sql.ref referencje; oracle.sql.array - kolekcje) OCCI - Oracle C++ Call Interface OCI - Oracle Call Interface PL/SQL 24
Skrypty Przygotowane skrypty umożliwiają stworzenie kilku obiektów i podstawowe zarządzanie nimi. Uruchomienie (oprócz pliku z zapytaniami) odbywa się poprzez wydanie polecenia @ scieżka_do_pliku; w linii poleceń (Run SQL Command). Zostały podzielone na cztery grupy: Tworzenie grupa skryptów tworzących obiekty wywołanie całej grupy odbywa się poprzez uruchomienie skryptu script_create.sql Wstawianie grupa skryptów wstawiających dane do stworzonych uprzednio tabel wywołanie całej grupy odbywa się poprzez uruchomienie skryptu script_insert.sql Zapytania plik sample_selects.sql zawiera zestawienie kilku przykładowych zapytań realizowanych na wstawionych danych. Usuwanie plik script_drop.sql zawiera grupę poleceń umożliwiających usunięcie utworzonych obiektów. 25