Definicja obiektowego modelu danych: struktura i zachowanie

Podziękowania

·         Dla Grzegorza Enzo Dołęgowskiego za wpisanie moich notatek do komputera.

Relacyjna baza danych (przypomnienie)

Pojęcia pierwotne

A – zbiór nazw atrybutów

D – zbiór wartości atomowych (napisy, liczby, daty, wartości logiczne)

E – zbiór typów atomowych (integer, float, string, boolean, date)

K – zbiór nazw relacji (potem będzie to zbiór klas)

Schemat tabel (relacji)

kol : KPfin (A)               (nazwie relacji przyporządkowujemy skończone zbiory nazw kolumn)

typ : K × AE                (nazwie relacji i nazwie atrybutu przyporządkowujemy typ elementarny)

Schemat bazy relacyjnej

SCHrel = (K, kol, typ)

Krotka relacji

Jeśli R K, to krotka o schemacie R jest funkcją przypisującą wartości nazwom kolumn:

            t : kol(R) → D

dla A kol(R), t(A) Dtyp(R,A)

W – zbiór wszystkich możliwych krotek

Egzemplarz relacji

Jeśli R K, to relacja o nazwie R jest skończonym zbiorem krotek o schemacie R.

Egzemplarz relacyjnej bazy danych

Funkcja val, która przypisuje nazwom relacji egzemplarze relacji:

INSTrel = (val)

val : KPfin (W)

Poprawność relacyjnej bazy danych

SCHrel = (K, kol, typ)

INSTrel = (val)

Dla każdego R K i dla każdej krotki t val(R), t ma schemat R.

Obiektowa baza danych

Pojęcia pierwotne

A – zbiór nazw atrybutów

O – zbiór identyfikatorów obiektów (OID)

D – wartości atomowe (napisy, liczby, wartości logiczne)

K – zbiór nazw klas i IsA częściowy porządek na K

E – zbiór typów atomowych (integer, float, string, boolean, date)

Wartości złożone (W)

W to najmniejszy zbiór o następujących właściwościach:

1.    D W                                                                                                                (skalar)

2.    O W                                                                                                                (referencja)

3.    Jeśli A1, A2, ..., An A (Ai Aj dla i j) oraz w1, w2, ..., wn   W,
to [A1:w1, A2:w2, ..., An:wn] W                                                                         (krotka)

4.    Jeśli w1, w2, ...,wm W (wi ≠ wj dla i ≠ j), to {w1, w2, ...,wm} W                     (zbiór)

Obiekt

Para (o, w) przy czym o O, w W.

Typy (T)

T to najmniejszy zbiór o następujących właściwościach:

1.    E T                                                                                                                  (typ elementarny)

2.    K T                                                                                                                 (typ referencyjny)

3.    Jeśli T T, to {T} T                                                                                        (typ zbiorowy)

4.    Jeśli A1, A2, ..., An A (Ai ≠ Aj dla i ≠ j) oraz T1, T2, ..., Tn T, to
[A1:T1, A2:T2, ..., An:Tn]
T                                                                                (typ krotkowy)

Hierarchia typów

≤ częściowy porządek na T (podtyp ≤ nadtyp)

≤ jest najmniejszym częściowym porządkiem o następujących właściwościach:

1.    Jeśli K IsA L, to K ≤ L       [Pracownik IsA Osoba, więc Pracownik ≤ Osoba]

2.    Jeśli T = [A1:T1, A2:T2, ..., An:Tn] T i U = [B1:U1, B2:U2, ..., Bm:Um] T oraz n ≤ m i
dla każdego i = 1, 2, ..., n istnieje j takie, że Ai = Bj i Uj  ≤ Ti, to U ≤ T.

3.    Jeśli T ≤ U, to {T} ≤ {U}.

Schemat struktury

SCHstruct = (K, IsA, typ)

typ : KT                        musi spełniać warunek:                  K IsA L typ(K) ≤ typ(L)

Rozszerzenie bazowe

Zbiór obiektów klasy

inst : KPfin(O)

dla każdego K, L K, K ≠ L zachodzi inst(K) inst(L) =  

Rozszerzenie

Zbiór obiektów klasy i jej podklas

inst* : KPfin(O)

Dziedzina (typu)

dom : TP(W)

1.    dom(integer) = zbiór liczb całkowitych

2.    dom(K) = inst*(K) dla K K

3.    Jeśli T = [A1:T1, A2:T2, ..., An:Tn] T, to
dom(T) = {[A1:w1, A2:w2, ..., An:wn] : dla i = 1, 2, ..., n wi
dom(Ti)}

4.    Jeśli T = {U}, to dom(T) = Pfin(dom(U))

Egzemplarz bazy danych (struktura)

Jeśli SCHstruct = (K, IsA, typ) jest schematem struktury, to

INSTstruct = (inst, val)

jest egzemplarzem schematu SCHstruct o ile spełnione są następujące warunki:

(1) inst jest bazowym rozszerzeniem                                             inst : K Pfin(O)

(2) val jest wartościowaniem                                                        val : OW

(3) o inst(K), K K val(o) dom(typ(K))

Dziedziczenie struktury

Niech SCHstruct = (K, IsA, typ) będzie schematem struktury.

Jeśli typ(K) jest krotkowy, to typ*(K) zawiera wszystkie składowe typ(K) oraz wszystkie A:T takie, że A:T jest składową L taką, że K IsA L i nie istnieje M różne od K i L takie, że A jest składową M i K IsA M i M IsA L.

SCHstruct jest poprawny o ile:

1.      przekształcenie typ* istnieje, oraz

2.      K IsA L typ*(K) ≤ typ*(L)

Wartości domyślne atrybutów

valst : KWkrotkowe

Musi być spełniać warunek — jeśli K K i A:w jest składową valst(K), to typ*(K) zawiera składową A. Niech T będzie typem A w typ*(K). Wówczas musi być prawdą, że w dom(T).

Schemat struktury z wartościami domyślnymi

SCHstruct = (K, IsA, typ, valst)

Wartościowanie z wartościami domyślnymi                                       val*: OW

val*(o) jest najuboższą wartością krotkową, która zawiera val(o) i spełnia poniższy warunek:

Jeśli     

  1. typ*(K) jest krotkowy i ma składową A:T,
  2. istnieje klasa L taka, że A:w jest składową valst(L) i K IsA L
  3. nie istnieje klasa M, taka że valst(M) ma składową A oraz K IsA M i M IsA L [nie istnieje klasa pośrednia między K i L, która definiowałaby wartość domyślną dla A],
  4. val(o) nie ma składowej A,
  5. o inst(K),

to:

  1. A:w jest składową val*(o).

Egzemplarz bazy danych z dziedziczeniem i wartościami domyślnymi

INSTstruct = (inst, val) jest egzemplarzem SCHstruct = (K, IsA, typ, valst), o ile spelnione są następujące warunki:

  1. Przekształcenie typ* istnieje.
  2. Przekształcenie val* istnieje.
  3. o inst(K), K K val*(o) dom(typ*(K))

Brak konfliktów dziedziczenia

SCHstruct = (K, IsA, typ, valst) jest wolny od konfliktów dziedziczenia, wtw. dla każdej trójki K, L, M K takich, że M IsA K, M IsA L zachodzi

1.    Jeśli typ(K) i typ(L) zawiera składową A, ale typ(M) jej nie zawiera, to istnieje klasa J, taka że typ(J) zawiera A oraz J IsA K, J IsA L, M IsA J.

2.    Dokładnie to samo odnosi się do valst.

Model zachowania

M – zbiór nazw metod

Sygnatura

M : K × T1 × ... × Tk → T       M M; K K; T1, T2, ..., Tk T

Schemat zachowania

SCHzach = (K, IsA, S)

S to skończony zbiór sygnatur metod o następującej właściwości

Jeśli (M : K × T1 × ... × Tk → T) S i M : K × U1 × ... × Um → U),

to k = m, U ≤ T i dla i = 1, 2, ..., k Ti ≤ Ui

Egzemplarz schematu zachowania

SCHzach = (K, IsA, S)

INSTzach = (inst, impl)

impl : S → Implementacje metod

impl(( M : K × T1 × ... × Tk → T)) = I

          I : dom(K) × dom(T1) × ... × dom(Tk) → dom(T)                                      (funkcja częściowa)

Pojedyncza dyspozycja = wybór metody tylko zależy tylko pierwszego argumentu.

Wielokrotna dyspozycja = wybór metody tylko zależy od wszystkich argumentów.

Diagram modelu formalnego

Schemat i egzemplarz obiektowej bazy danych

SCHstruct = (K, IsA, typ, valst)  schemat struktury

SCHzach = (K, IsA, S)                         schemat zachowania

SCH = (K, IsA, typ, valst, S)               schemat bazy obiektów

INSTstruct = (inst, val)                           egzemplarz schematu struktury

INSTzach = (inst, impl)              egzemplarz schematu zachowania

INST = (inst, val, impl)                        egzemplarz bazy obiektów