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)

Nazwie relacji przyporządkowujemy skończone zbiory nazw kolumn:

kol : KPfin(A)

Nazwie relacji i nazwie atrybutu przyporządkowujemy typ elementarny:

typ : K × AE

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 : KP fin(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. (skalar) DW
  2. (referencja) DO
  3. (krotka) Jeśli A1, A2, ..., AnA (Ai ≠ Aj dla i ≠ j) oraz w1, w2, ..., wnW, to [A1:w1, A2:w2, ..., An:wn] ∈ W.
  4. (zbiór) Jeśli w1, w2, ...,wmW (wi ≠ wj dla i ≠ j), to {w1, w2, ...,wm} ∈ W.

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. (typ elementarny) ET
  2. (typ referencyjny) KT
  3. (typ zbiorowy) Jeśli T ∈ T, to {T} ∈ T.
  4. (typ krotkowy) Jeśli A1, A2, ..., AnA (Ai≠ Aj dla i ≠ j) oraz T1, T2, ..., TnT, to [A1 : T1, A2 : T2, ..., An : Tn] ∈ T.

Hierarchia typów

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

Relacja ≤ 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, a także 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ć następujący warunek:

K IsA L ⇒ typ(K) ≤ typ(L)

Rozszerzenie bazowe

Rozszerzenie bazowe to zbiór bezpośrednich obiektów klasy:

inst : KP fin(O)

Dla każdego K, L ∈ K, K ≠ L zachodzi:

inst(K) ∩ inst(L) = ∅

Rozszerzenie

Zbiór wszystkich obiektów klasy i jej podklas:

inst* : KPfin(O)

inst*(K) = L ∈ K, L IsA K inst(L)

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:

struct = (inst, val)

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

  1. inst jest rozszerzeniem bazowym:

    inst : K Pfin(O)

  2. val jest wartościowaniem:

    val : OW

  3. o ∈ inst(K), K ∈ K ⇒ val(o) ∈ dom(typ(K))

    Diagram elementów schematu struktury.

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 spełnione są jednocześnie oba poniższe warunki:

  1. przekształcenie typ* istnieje,
  2. K IsA L ⇒ typ*(K) ≤ typ*(L).

Wartości domyślne atrybutów

valst : KWkrotkowe

Funkcja val musi być spełniać jednocześnie oba poniższe warunki:

  1. Jeśli K ∈ K i A:w jest składową valst(K), to typ*(K) zawiera składową A.
  2. 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:

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

INSTstruct = (inst, val) jest egzemplarzem SCHstruct = (K, IsA, typ, valst), o ile spełnione 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))

    Diagram elementów schematu struktury z dziedziczeniem i wartościami domyślnymi.

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 zachodzą następujące warunki:

  1. Jeśli typ(K) i typ(L) zawierają 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. Jeśli valst(K) i valst(L) zawierają składową A, ale valst(M) jej nie zawiera, to istnieje klasa J, taka że valst(J) zawiera A oraz J IsA K, J IsA L, M IsA J.

    Diagram klas rozstrzygania konfliktów dziedziczenia.

Model zachowania

M - zbiór nazw metod.

Sygnatura

M : K × T1 × ... × Tk → T

Przy czym M ∈ M; K ∈ K; T1, T2, ..., TkT.

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 oraz (M : K × U1 × ... × Uk → U) ∈ S, to:

Egzemplarz schematu zachowania

SCHzach = (K, IsA, S)

INSTzach = (inst, impl)

impl : S → Implementacje metod

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

I to funkcja cześciowa:

I : dom(K) × dom(T1) × ... × dom(Tk) → dom(T)

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

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.