Modelowanie baz danych - Obiektowe bazy danych cz.2

1. Jeżeli są już zdefiniowane typy obiektowe to można tworzyć tabele obiektowe, zawierające atrybuty zdefiniowanych typów.

2. Tabela obiektowa jest podobna do tabeli relacyjnej. Może ona dodatkowo zawierać dodatkową kolumnę z identyfikatorem obiektu.

3. Tworzenie tabeli obiektowej:

CREATE TABLE nazwa OF nazwa_typu;

Polecenie pozwala na:
  • zdefiniowanie wartości domyślnych dla kolumn tabeli
  • określenie ograniczeń dla kolumn tabeli
  • określenie sposobu przechowywania tabel zagnieżdżonych oraz tablic VARRAY
4. Analogicznie jak dla kolumn tabel relacyjnych, na atrybuty tabel obiektowych można nakładać ograniczenia

np.
CREATE TYPE lokalizacja_objtyp AS OBJECT (
nr_budynku NUMBER,
ulica VARCHAR2(40),
miasto VARCHAR2(40)
);

Tworzymy typ obiektowy:

CREATE TYPE liniaWFakturze AS Object(
nr NUMBER,
nazwa Varchar2(400),
cenaBrutto NUMBER
);

Nowy typ jako tabela:
CREATE TYPE produktyWFakturze AS TABLE OF liniaWFakturze;

Nowa tabela z tabelą zagnieżdżoną:
CREATE TABLE faktury(
nrFaktury VARCHAR2(20) PRIMARY KEY,
dataSprzedazy DATE,
produkty produktyWFrakturze
);

Wprowadzenie danych:

INSERT INTO faktury VALUES ('01/12/2022', SYSDATE, produktyWFakturze(
liniaWFakturze(1,'Lodówka',950),
liniaWFakturze(2,'Pralka',850)
));

Odczytanie danych:
SELECT * FROM Fakturyl
SELECT * FROM faktury, TABLE(produkty);

Typ Tablicowy:

CREATE TYPE wpisyNaFakturze AS VARRAY(50) OF pozycjaNaFakturze;

CREATE TABLE faktury(
nrFaktury VARCHAR2(20) PRIMARY KEY,
dataSprzedazy DATE,
wpisy wpisyNaFakturze 
);

INSERT INTO faktury VALUES ('01/12/2022', SYSDATE, wpisyNaFakturze(pozycjaNaFakturze(1,'Lodówka',950)));

5. Kolekcje można zagnieżdżać w sposób pośredni, poprzez referencje. Można utworzyć tabelę zagnieżdżoną typu obiektowego zawierającą atrybut wskazujący obiekt o atrybucie w postaci tabeli zagnieżdżonej lub tablicy VARRAY.

CREATE TYPE osoba_ref_ntabtyp AS TABLE OF REF osoba_objtyp;

Tworzenie typu obiektowego z typem referencyjnym:

CREATE TYPE projekty_objtyp AS OBJECT(
id NUMBER(4),
tytul VARCHAR2(15),
prowadzacy_ref REF osoba_objtyp,
zespol_n_tab osoba_ref_ntabtyp
);

Na bazie obiektowo relacyjnej można wyonywać operacje zarówno obiektowe jak i relacyjne.

Poniższe polecenia definiują typ obiektowy oraz tabele obiektową:

CREATE TYPE osoba_objtyp AS OBJECT(
imie VARCHAR2(30),
nazwisko VARCHAR2(30),
telefon VARCHAR2(20)
);

CREATE TABLE osoba objtab OF osoba_objtyp;

6. Każdy typ obiektowy posiada domyślnie stworzony przez system konstruktor, czyli metodę tworzącą obiekty. Nazwa konstruktora jest ta sama co typu obiektowego. 

7. W deklaracji kolumny tabeli można określić wartością domyślną:

CREATE TABLE kontakty_objtab OF kontakty_objtyp (kontakt DEFAULT osoba_objtyp('Kowalski','00000000000');