EBOOK Obiektowe i półstrukturalne bazy danych
Opis
Burzliwy rozwój obiektowych baz danych miał miejsce w latach dziewięćdziesiątych XX wieku. W ostatnich latach XX wieku silnie rozwijała się też koncepcja półstrukturalnych baz danych. Obecnie nadal używa się obu tych rodzajów baz danych. Chociaż są one dalej rozbudowywane, jednak zajmują ważne nisze rynkowe.
Książka składa się z dwóch części. Pierwsza z nich to podręcznik do prowadzonego przez autora wykładu monograficznego. Zawiera prezentację modeli danych strukturalnego obiektowego i półstrukturalnego (w tym XML) oraz omówienie języków zapytań dla tych modeli (OQL, XQuery, SBQL itd). Dużo miejsca poświęcono interesującej półstrukturalnej bazie danych LORE. Przedstawiłem jej ciekawy język zapytań Lorel, jego realizację w SZBD oraz koncepcję półschematu danych DataGuide.
Druga część tej książki to zbiór wyników badań naukowych. Zawarto w niej autorską koncepcję północnej kontroli typów opartą na półschematach danych, zaimplementowaną w SZBD JLoXiM strumieniową metodę realizacji zapytań SBQL oraz rozważania o uniwersalnym modelu danych i uniwersalnym języku zapytań.
Wstęp 16
1.1 Zawartość rozdziałów 16
1.2 Projekt LoXiM 17
2 Strukturalne obiektowe bazy danych 21
2.1 Relacyjny model danych 21
2.1.1 Pojęcia pierwotne 21
2.1.2 Schemat tabel/relacji i schemat relacyjnej bazy danych 22
2.1.3 Egzemplarz relacji i egzemplarz relacyjnej bazy danych 22
2.2 Obiektowy model danych 23
2.2.1 Pojęcia pierwotne 23
2.2.2 Wartości 24
2.2.3 Typy danych 25
2.2.4 Hierarchia typów danych 26
2.2.5 Schemat struktury obiektowej bazy danych 27
2.2.6 Przykład schematu obiektowej bazy danych 28
2.2.7 Egzemplarz obiektowej bazy danych 28
2.2.8 Dziedziczenie struktury 31
2.2.9 Wartości domyślne 32
2.2.10 Brak konfliktów dziedziczenia wielokrotnego 33
2.2.11 Klasyfikacja wielokrotna i dynamiczna 34
2.3 Model zachowania 36
2.3.1 Sygnatury metod 36
2.3.2 Schemat zachowania 36
2.3.3 Egzemplarz schematu zachowania 37
2.3.4 Problem dyspozycji 38
2.4 Podsumowanie 39
3 Przegląd języków zapytań obiektowych baz danych 41
3.1 NaszQL 41
3.2 Ahoj przygodo! 43
3.3 Złączenie zależne 45
3.4 Agregacja bez GROUP BY 46
3.5 Wyrażenia ścieżkowe 47
3.6 Zmienne ścieżkowe 49
3.7 Dane półstrukturalne OEM 51
3.8 Lorel i UnQL 52
3.9 Dane XML 54
3.10 XML-QL 56
3.11 Transformacje XSLT 60
3.12 Podsumowanie 61
4 Obiektowo-relacyjne bazy danych 63
4.1 Zalety typów obiektowych 63
4.2 Elementy obiektowości w SQL:1999 64
4.3 Elementy obiektowości w Oracle 66
4.3.1 Kolekcje 66
4.3.2 Typy użytkownika 67
4.3.3 Konstruktor 68
4.3.4 Metody typu obiektowego 72
4.3.5 Typ referencyjny 75
4.3.6 Porównywanie wartości typów obiektowych 77
4.3.7 Perspektywy obiektowe 78
4.4 Rozszerzony przykład. Baza zamówień 80
5 Lorel - język półstrukturalnych zapytań 87
5.1 Model danych 87
5.2 Podstawowe założenie języka 88
5.3 Równość w pięciu smakach 90
5.4 Wspólne przedrostki ścieżek 93
5.5 Wyrażenia ścieżkowe 97
5.6 Przykład przykładów 99
5.7 Podsumowanie 100
6 Aparat wykonawczy języka Lorel 102
6.1 Przykładowe dane 102
6.2 Wykonywanie zapyta« w LORE 103
6.3 Maszyna wirtualna aparatu wykonawczego LORE 104
6.3.1 Scan 105
6.3.2 Join 105
6.3.3 Select 106
6.3.4 Aggr 107
6.3.5 Plan wykonania zapytania 108
6.4 Indeksy 110
6.4.1 Vindex 110
6.4.2 Lindex 111
6.4.3 Bindex 111
6.4.4 Pindex 112
6.4.5 Tindex 112
6.4.6 Plan wykonania zapytania z użyciem indeksu 113
6.5 Zapytanie z wynikiem wielowymiarowym 114
6.5.1 Konstrukcja wyniku zapytania 115
6.5.2 Analiza możliwych planów wykonania 116
6.6 Podsumowanie 120
7 DataGuide 122
7.1 Półschemat danych i jego zastosowania 122
7.2 Półschemat w formie DataGuide 123
7.3 Algorytm konstrukcji silnego DataGuide 127
7.4 Przyrostowa pielęgnacja silnego DataGuide 130
7.5 Zastosowanie DataGuide w realizacji zapyta« 134
7.6 Podsumowanie 135
8 Języki zapytań dla danych XML 136
8.1 Przykładowy dokument XML 137
8.2 Przegląd języków 137
8.2.1 Lorel 138
8.2.2 XML-QL 139
8.2.3 XML-GL 140
8.2.4 XSLT 141
8.2.5 XQL 144
8.3 XPath 146
8.3.1 Krok lokalizacyjny 146
8.3.2 Osie 147
8.3.3 Predykaty 147
8.3.4 Zapis skrócony 149
8.3.5 Przykłady 149
8.4 Podstawowe elementy XQuery 150
8.4.1 Wyrażenia ścieżkowe 151
8.4.2 Konstruktor elementu 151
8.5 FLWOR 152
8.6 Instrukcje warunkowe i kwantyfikatory 153
8.7 Funkcje i rekurencja 155
8.8 Kontrola poprawności typów 157
8.8.1 Dwa systemy typów 157
8.8.2 Schemat przykładowego dokumentu 157
8.8.3 Badanie typu 160
8.8.4 Typ argumentu funkcji 161
8.8.5 Instrukcja wyboru dla typu 162
8.8.6 Typy elementarne 164
8.9 Podsumowanie 165
8.10 Zadanie 165
9 Podejście stosowe do języków zapytań 168
9.1 Modele składu obiektów 169
9.1.1 Dane półstrukturalne (model M0) 169
9.1.2 Dane obiektowe, klasy (model M1) 170
9.1.3 Role dynamiczne (model M2) 172
9.1.4 Hermetyzacja (model M3) 173
9.2 Stos środowisk i wiązanie nazw 174
9.2.1 Stos środowisk 174
9.2.2 Wiązanie nazw 174
9.2.3 Funkcja nested 176
9.3 Język zapytań SBQL 179
9.3.1 Składnia zapytań 179
9.3.2 Stos wyników 180
9.3.3 Semantyka zapytań 181
9.3.4 Operatory algebraiczne 181
9.3.5 Operatory niealgebraiczne 182
9.3.6 Przykładowe zapytania w SBQL 185
10 Półmocna kontrola typów w językach zapytań 187
10.1 Mocna kontrola typów 187
10.2 Przyczynkowość istniejących systemów typów 188
10.3 Przykład niespójności w systemie typów ODMG 190
10.4 Kolekcje 191
10.5 Półmocna kontrola typów 193
10.6 Prosty czy wymyślny system typów? 193
10.7 Niezależność danych i schematy baz danych 194
10.8 Źródła zbędnej złożoności 196
10.9 Koncepcja systemu kontroli typów 197
10.10 Zewnętrzny system typów 199
10.10.1 Architektura trójwarstwowa 200
10.10.2 Deklaracja obiektu 202
10.10.3 Deklaracja podprogramu 203
10.10.4 Typy nazwane 203
10.10.5 Typy rozróżnione 205
10.10.6 Deklaracja klasy 205
10.10.7 Deklaracja interfejsu 208
10.10.8 Programista systemowy 210
10.10.9 Administrator 211
10.10.10 Programista administracyjny 213
10.10.11 Programista aplikacyjny 215
10.10.12 Przykładowa składnia zewnętrznego systemu typów 217
10.11 Schemat bazy danych i metabaza 218
10.11.1 Metabaza 219
10.11.2 Atrybuty wierzchołków metabazy 221
10.11.3 Korzenie, przynależność do klas i dziedziczenie 222
10.11.4 Metabaza jako słownik danych 223
10.11.5 Role dynamiczne 223
10.11.6 Hermetyzacja 223
10.11.7 Podprogramy i ich parametry referencyjne 224
10.11.8 Perspektywy 226
10.12 Sygnatury 227
10.12.1 Definicja sygnatur 227
10.12.2 Statyczna funkcja nested 233
10.13 Tablice decyzyjne wyprowadzania typów 234
10.13.1 Operatory arytmetyczne i napisowe 235
10.13.2 Operatory porównania 237
10.13.3 Operatory logiczne 238
10.13.4 Generyczne operatory algebraiczne 239
10.13.5 Generyczne operatory niealgebraiczne 243
10.13.6 Operator punktu stałego 247
10.13.7 Podsumowanie 248
10.14 Aparat statycznej kontroli typów 248
10.14.1 Architektura aparatu kontroli typów 249
10.14.2 Procedura statycznej kontroli typów 251
10.14.3 Modyfikacja drzewa składni zapytania 256
10.14.4 Wznowienie procesu kontroli typów po błędzie 261
10.14.5 Sygnatury wariantowe i rozwidlenie procesu 264
10.14.6 Przykładowa statyczna kontrola typów 265
10.14.7 Przykład dla schematu danych z dziedziczeniem 270
11 Strumieniony aparat wykonawczy JLoXiM 272
11.1 Motywacja 272
11.2 Założenia 274
11.3 Strumień 274
11.3.1 Rekord kontrolny 275
11.3.2 Resultset* 275
11.3.3 Dziedzina komunikacji 275
11.3.4 Relacja zgodności rekordów kontrolnych 276
11.3.5 Uporządkowanie strumienia 277
11.4 Komponenty 277
11.4.1 Store 278
11.4.2 Stamp 278
11.4.3 GetNested 279
11.4.4 RefMaterializer 279
11.4.5 Merge 280
11.4.6 HighestDefined 281
11.4.7 Komponenty dla operatorów algebraicznych 281
11.4.8 BreakBag 281
11.4.9 MakeBag 282
11.4.10 Select 282
11.5 Konstrukcja sieci wykonawczej dla zapytania 282
11.5.1 Statyczne wiązanie nazw i operatorów 283
11.5.2 Budowa planu sieci wykonawczej 284
11.6 Przykłady sieci 288
11.7 Optymalizacje sieci wykonawczej 290
11.8 Realizacja 290
11.8.1 Implementacja strumieni 291
11.8.2 Scalanie komponentów 291
11.8.3 Strumienie a pamię