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 Report

Transcript 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