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) zbiór nazw relacji (potem będzie to zbiór klas) Schemat tabel (relacji) kol : P fin (A) typ : Α E Schemat bazy relacyjnej SCH rel = (, kol, typ) rotka relacji (nazwie relacji przyporządkowujemy skończone zbiory nazw kolumn) (nazwie relacji i nazwie atrybutu przyporządkowujemy typ elementarny) Jeśli R, to krotka o schemacie R jest funkcją przypisującą wartości nazwom kolumn: t : kol(r) D dla A kol(r), t(a) D typ(r,a) W zbiór wszystkich możliwych krotek Egzemplarz relacji Jeśli R, 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: INST rel = (val) val : P fin (W) Poprawność relacyjnej bazy danych SCH rel = (, kol, typ) INST rel = (val) Dla każdego R 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) zbiór nazw klas i IsA częściowy porządek na 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 A 1, A 2,..., A n A (A i A j dla i j) oraz w 1, w 2,..., w n W, to [A 1 :w 1, A 2 :w 2,..., A n :w n ] W (krotka) 4. Jeśli w 1, w 2,...,w m W (w i w j dla i j), to {w 1, w 2,...,w m } 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. T (typ referencyjny) 3. Jeśli T T, to {T} T (typ zbiorowy) 4. Jeśli A 1, A 2,..., A n A (A i A j dla i j) oraz T 1, T 2,..., T n T, to [A 1 :T 1, A 2 :T 2,..., A n :T n ] 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 IsA L, to L [Pracownik IsA Osoba, więc Pracownik Osoba] 2. Jeśli T = [A 1 :T 1, A 2 :T 2,..., A n :T n ] T i U = [B 1 :U 1, B 2 :U 2,..., B m :U m ] T oraz n m i dla każdego i = 1, 2,..., n istnieje j takie, że A i = B j i U j T i, to U T. 3. Jeśli T U, to {T} {U}. Schemat struktury SCH struct = (, IsA, typ) typ : T musi spełniać warunek: IsA L typ() typ(l)
Rozszerzenie bazowe Zbiór obiektów klasy inst : P fin (O) dla każdego, L, L zachodzi inst() inst(l) = Rozszerzenie Zbiór obiektów klasy i jej podklas inst* : P fin (O) inst*() = inst(l) L L IsA Dziedzina (typu) dom : T P(W) 1. dom(integer) = zbiór liczb całkowitych 2. dom() = inst*() dla 3. Jeśli T = [A 1 :T 1, A 2 :T 2,..., A n :T n ] T, to dom(t) = {[A 1 :w 1, A 2 :w 2,..., A n :w n ] : dla i = 1, 2,..., n w i dom(t i )} 4. Jeśli T = {U}, to dom(t) = P fin (dom(u)) Egzemplarz bazy danych (struktura) Jeśli SCH struct = (, IsA, typ) jest schematem struktury, to INST struct = (inst, val) jest egzemplarzem schematu SCH struct o ile spełnione są następujące warunki: (1) inst jest bazowym rozszerzeniem inst : P fin (O) (2) val jest wartościowaniem val : O W (3) o inst(), val(o) dom(typ()) klasy typ T typy inst dom obiekty O val W wartości
Dziedziczenie struktury Niech SCH struct = (, IsA, typ) będzie schematem struktury. Jeśli typ() jest krotkowy, to typ*() zawiera wszystkie składowe typ() oraz wszystkie A:T takie, że A:T jest składową L taką, że IsA L i nie istnieje M różne od i L takie, że A jest składową M i IsA M i M IsA L. SCH struct jest poprawny o ile: 1. przekształcenie typ* istnieje, oraz 2. IsA L typ*() typ*(l) Wartości domyślne atrybutów val st : W krotkowe Musi być spełniać warunek jeśli i A:w jest składową val st (), to typ*() zawiera składową A. Niech T będzie typem A w typ*(). Wówczas musi być prawdą, że w dom(t). Schemat struktury z wartościami domyślnymi SCH struct = (, IsA, typ, val st ) Wartościowanie z wartościami domyślnymi val*: O W val*(o) jest najuboższą wartością krotkową, która zawiera val(o) i spełnia poniższy warunek: Jeśli 1. typ*() jest krotkowy i ma składową A:T, 2. istnieje klasa L taka, że A:w jest składową val st (L) i IsA L 3. nie istnieje klasa M, taka że val st (M) ma składową A oraz IsA M i M IsA L [nie istnieje klasa pośrednia między i L, która definiowałaby wartość domyślną dla A], 4. val(o) nie ma składowej A, to: 5. o inst(), 6. A:w jest składową val*(o). Egzemplarz bazy danych z dziedziczeniem i wartościami domyślnymi INST struct = (inst, val) jest egzemplarzem SCH struct = (, IsA, typ, val st ), o ile spelnione są następujące warunki: 1. Przekształcenie typ* istnieje. 2. Przekształcenie val* istnieje. 3. o inst(), val*(o) dom(typ*()) klasy typ* T typy inst dom obiekty O val* W wartości
Brak konfliktów dziedziczenia SCH struct = (, IsA, typ, val st ) jest wolny od konfliktów dziedziczenia, wtw. dla każdej trójki, L, M takich, że M IsA, M IsA L zachodzi 1. Jeśli typ() 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, J IsA L, M IsA J. 2. Dokładnie to samo odnosi się do val st. L J M Model zachowania M zbiór nazw metod Sygnatura M : T 1... T k T M M; ; T 1, T 2,..., T k T Schemat zachowania SCH zach = (, IsA, S) S to skończony zbiór sygnatur metod o następującej właściwości Jeśli (M : T 1... T k T) S i M : U 1... U m U), to k = m, U T i dla i = 1, 2,..., k T i U i Egzemplarz schematu zachowania SCH zach = (, IsA, S) INST zach = (inst, impl) impl : S Implementacje metod impl(( M : T 1... T k T)) = I I : dom() dom(t 1 )... dom(t k ) 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. (funkcja częściowa) Diagram modelu formalnego IsA dom W T typ val inst O sygn S impl realizacja
Schemat i egzemplarz obiektowej bazy danych SCH struct = (, IsA, typ, val st ) schemat struktury SCH zach = (, IsA, S) schemat zachowania SCH = (, IsA, typ, val st, S) schemat bazy obiektów INST struct = (inst, val) egzemplarz schematu struktury INST zach = (inst, impl) egzemplarz schematu zachowania INST = (inst, val, impl) egzemplarz bazy obiektów