Dane szczegółowe książki
Podstawowy wykład z systemów baz danych / Ullman, Jeffrey D. (1942-); Jurkiewicz, Monika; Widom, Jennifer
Tytuł
Podstawowy wykład z systemów baz danych
Serie wydawnicze
Wydawnictwo
Warszawa: Wydawnictwa Naukowo-Techniczne, 1999
ISBN
8320423945
Hasła przedmiotowe
Spis treści
pokaż spis treści
Dziedzina systemów baz danych . . . . . . . . . . . . . . . . . . 19
1.1. Ewolucja systemów baz danych . . . . . . . . . . . . . . . . . 19
1.1.1. Pierwsze systemy zarządzania bazami danych . . . . . . . . . . . . 20
1.1.2. Relacyjne systemy baz danych . . . . . . . . . . . . . . . . . . . 22
1.1.3. Coraz mnięjsze systemy . . . . . . . . . . . . . . . . . . . . . . 24
1.1.4. Coraz większe systemy . . . . . . . . . . . . . . . . . . . . . . 24
1.2. Architektura systemu DBMS . . . . . . . . . . . . . . . . . . . 25
1.2.1. Przegląd składowych systemu DBMS . . . . . . . . . . . . . . . 26
1.2.2. Moduł zarządzania pamięcią. . . . . . . . . . . . . . . . . . . . 28
1.2.3. Moduł zarządzania zapytaniami . . . . . . . . . . . . . . . . . . 29
1.2.4. Moduł zarządzania transakcjami . . . . . . . . . . . . . . . . . . 30
1.2.5. Architektura klient-serwer. . . . . . . . . . . . . . . . . . . . . 33
1.3. Przyszłość systemów baz danych . . . . . . . . . . . . . . . . . 34
1.3.1. Typy, klasy i obiekty . . . . . . . . . . . . . . . . . . . . . . . 34
1.3.2. Więzy i wyzwalacze . . . . . . . . . . . . . . . . . . . . . . . 38
1.3.3. Dane multimedialne . . . . . . . . . . . . . . . . . . . . . . . 39
1.3.4. Integracja danych. . . . . . . . . . . . . . . . . . . . . . . . . 40
1.4. Układ książki . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.4.1. Projektowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1.4.2. Programowanie. . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1.5. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
1.6. Literatura do rozdziału 1 . . . . . . . . . . . . . . . . . . . . . 45
2
Modelowanie baz danych . . . . . . . . . . . . . . . . . . . . . . . 46
2.1. Wprowadzenie do języka ODL . . . . . . . . . . . . . . . . . . 47 2.1.1. Projektowanie zorientowane obiektowo . . . . . . . . . . . . . . . 48
10
SPIS TREŚCI
2.1.2. Deklaracje interfejsu . . . . . . . . . . . . . . . . . . . . . . . . 50 2.1.3. Atrybuty w języku ODL . . . . . . . . . . . . . . . . . . . . . . 50 2.1.4. Związki wjęzyku ODL. . . . . . . . . . . . . . . . . . . . . . . 52 2.1.5. Związki odwrotne . . . . . . . . . . . . . . . . . . . . . . . . . 53 2.1.6. Liczebność związków . . . . . . . . . . . . . . . . . . . . . . . 55 2.1.7. Typy wjęzYku ODL . . . . . . . . . . . . . . . . . . . . . . . . 58 2.1.8. Ćwiczenia do podrozdziału 2.1 . . . . . . . . . . . . . . . . . . . 60
2.2. Diagramy związków encji . . . . . . . . . . . . . . . . . . . . 62
2.2.1. Liczebność związków encji . . . . . . . . . . . . . . . . . . . . . 64
2.2.2. Związki wieloargumentowe. . . . . . . . . . . . . . . . . . . . . 65
2.2.3. Role w związkach . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.2.4. Atrybuty związków. . . . . . . . . . . . . . . . . . . . . . . . . 68
2.2.5. Przekształcanie związków wieloargumentowych w binarne . . . . . 70
2.2.6. Ćwiczenia do podrozdziału 2.2 . . . . . . . . . . . . . . . . . . . 72
2.3. Zasady projektowania . . . . . . . . . . . . . . . . . . . . . . . 73
2.3.1. Dokładność . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
2.3.2. Unikanie redundancji. . . . . . . . . . . . . . . . . . . . . . . . 74
2.3.3. Prostota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
2.3.4. Dobór właściwych elementów . . . . . . . . . . . . . . . . . . . 76
2.3.5. Ćwiczenia do podrozdziału 2.3 . . . . . . . . . . . . . . . . . . . 78
2.4. Podk lasy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2.4.1. Podklasy w systemie ODL . . . . . . . . . . . . . . . . . . . . . 81
2.4.2. Dziedziczenie wielokrotne w języku ODL. . . . . . . . . . . . . . 81
2.4.3. Podklasy w diagramach związków encji. . . . . . . . . . . . . . . 84
2.4.4. Dziedziczenie w modelach związków encji . . . . . . . . . . . . . 85
2.4.5. Ćwiczenia do podrozdziału 2.4 . . . . . . . . . . . . . . . . . . . 86
2.5. Modelowanie więzów . . . . . . . . . . . . . . . . . . . . . . . 87
2.5.1. Klucze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
2.5.2. Deklarowanie kluczy wjęzyku ODL . . . . . . . . . . . . . . . . 90
2.5.3. Reprezentowanie kluczy w modelu związków encji . . . . . . . . . 91
2.5.4. Więzy jednoznaczności. . . . . . . . . . . . . . . . . . . . . . . 92
2.5.5. Integralność referencyjna . . . . . . . . . . . . . . . . . . . . . . 93
2.5.6. Integralność referencyjna w diagramach związków encji. . . . . . . 94
2.5.7. Inne rodzaje więzów . . . . . . . . . . . . . . . . . . . . . . . . 95
2.5.8. Ćwiczenia do podrozdziału 2.5 . . . . . . . . . . . . . . . . . . . 96
2.6. Zbiory słabych encji . . . . . . . . . . . . . . . . . . . . . . . . 97
2.6.1. Przyczyny zbiorów słabych encji . . . . . . . . . . . . . . . . . . 97
2.6.2. Wymagania dla zbiorów słabych encji . . . . . . . . . . . . . . . 99
2.6.3. Notacja zbiorów słabych encji . . . . . . . . . . . . . . . . . . . 101
2.6.4. Ćwiczenia do podrozdziału 2.6 . . . . . . . . . . . . . . . . . . . 101
2.7. Modele o znaczeniu historycznym . . . . . . . . . . . . . . . . 102 "
2.7.1. Model sieciowy . . . . . . . . . . . . . . . . . . . . . . . . . . 102 2.7.2. Schematy reprezentacji sieci . . . . . . . . . . . . . . . . . . . . 104 2.7.3. Model hierarchiczny . . . . . . . . . . . . . . . . . . . . . . . . 105 2.7.4. Ćwiczenia do podrozdziału 2.7 . . . . . . . . . . . . . . . . . . . 107
SPIS TREŚCI
11
2.8. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 2.9. Literatura do rozdziału 2 . . . . . . . . . . . . . . . . . . . . . 109
3
Relacyjny model danych . . . . . . . . . . . . . . . . . . . . . . . 110
3.1. Podstawy modeli relacyjnych . . . . . . . . . . . . . . . . . . . 110
3.1.1. Atrybuty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
3.1.2. Schematy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
3.1.3. Krotki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.1.4. Dziedziny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
3.1.5. Równoważne sposoby reprezentowania relacji . . . . . . . . . . . 1 13
3.1.6. Instancje relacji . . . . . . . . . . . . . . . . . . . . . . . . . . 115
3.1.7. Ćwiczenia do podrozdziału 3.1 . . . . . . . . . . . . . . . . . . . 116
3.2. Od projektów ODL do projektów relacyjnych . . . . . . . . . . 116
3.2.1. Od atrybutów wjęzyku ODL do atrybutów relacji. . . . . . . . . . 117
3.2.2. Atrybuty nieatomowe w klasach . . . . . . . . . . . . . . . . . . 118
3.2.3. Reprezentowanie konstruktorów innych typów . . . . . . . . . . . 122
3.2.4. Reprezentowanie relacji jednowartościowych . . . . . . . . . . . . 123
3.2.5. Reprezentowanie związków wielowartościowych . . . . . . . . . . 125
3.2.6. A gdy nie ma klucza... . . . . . . . . . . . . . . . . . . . . . . 127
3.2.7. Reprezentowanie relacji oraz jej odwrotności . . . . . . . . . . . . 128
3.2.8. Ćwiczenia do podrozdziału 3.2 . . . . . . . . . . . . . . . . . . . 129
3.3. Od diagramów związków encji do projektów relacyjnych . . . 131
3.3.1. Od zbiorów encji do relacji . . . . . . . . . . . . . . . . . . . . . 132
3.3.2. Od związków encji do relacji . . . . . . . . . . . . . . . . . . . . 133
3.3.3. Zasady postępowania ze słabymi zbiorami encji . . . . . . . . . . . 136
3.3.4. Ćwiczenia do podrozdziału 3.3 . . . . . . . . . . . . . . . . . . . 139
3.4. Przekształcanie struktur podklas do postaci relacji . . . . . . . 140
3.4.1. Relacyjne reprezentacje podklas z modelu ODL. . . . . . . . . . . 141
3.4.2. Reprezentowanie związków isa w modelu relacyjnym . . . . . . . . 142
3.4.3. Porównanie różnych metod . . . . . . . . . . . . . . . . . . . . . 143
3.4.4. Tworzenie relacji z wartościami pustymi . . . . . . . . . . . . . . 144
3.4.5. Ćwiczenia do podrozdziału 3.4 . . . . . . . . . . . . . . . . . . . 145
3.5. Zależności funkcyjne . . . . . . . . . . . . . . . . . . . . . . . 147
3.5.1. Definicja zależności funkcyjnych . . . . . . . . . . . . . . . . . . 147
3.5.2. Klucze relacji . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
3.5.3. Nadklucze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
3.5.4. Wykrywanie kluczy w relacji . . . . . . . . . . . . . . . . . . . . 152
3.5.5. Klucze relacji powstających z opisów wjęzyku ODL . . . . . . . . 154
3.5.6. Ćwiczenia do podrozdziału 3.5 . . . . . . . . . . . . . . . . . . . 156
3.6. Regu ły dotyczące zależności funkcyjnych . . . . . . . . . . . . 156
3.6.1. Zasady podziału i łączenia . . . . . . . . . . . . . . . . . . . . . 157
3.6.2. Zależności trywialne . . . . . . . . . . . . . . . . . . . . . . . . 159
3.6.3. Obliczanie domknięcia zbioru atrybutów . . . . . . . . . . . . . . 160
3.6.4. Reguła przechodniości . . . . . . . . . . . . . . . . . . . . . . . 163
12
SPIS TREŚCI
3.6.5. Domknięcie zbioru zależności funkcyjnych . . . . . . . . . . . . . 165
3.6.6. Ćwiczenie do podrozdziału 3.6 . . . . . . . . . . . . . . . . . . . 166
3.7. Proje ktowanie relacyjnych schematów baz danych . . . . . . . 168
3.7.1. Anomalie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
3.7.2. Dekompozycja relacji . . . . . . . . . . . . . . . . . . . . . . . 170
3.7.3. Postać normalna Boyce'a-Codda . . . . . . . . . . . . . . . . . . 172
3.7.4. Dekompozycja do postaci BCNF . . . . . . . . . . . . . . . . . . 174
3.7.5. Projektowanie zależności funkcyjnych . . . . . . . . . . . . . . . 180
3.7.6. Odzyskiwanie danych po dekompozycji. . . . . . . . . . . . . . . 181
3.7.7. Trzecia postać normalna . . . . . . . . . . . . . . . . . . . . . . 184
3.7.8. Ćwiczenia do podrozdziału 3.7 . . . . . . . . . . . . . . . . . . . 187
3.8. Zależności wielowartościowe . . . . . . . . . . . . . . . . . . . 188
3.8.1. Niezależność atrybutów i wynikająca stąd redundancja . . . . . . . 188
3.8.2. Definicja zależności wielowartościowych . . . . . . . . . . . . . . 190
3.8.3. Wnioskowanie z zależności wielowartościowych . . . . . . . . . . 192
3.8.4. Czwarta postać normalna . . . . . . . . . . . . . . . . . . . . . . 194
3.8.5. Dekompozycja do czwartej postaci normalnęj . . . . . . . . . . . . 195
3.8.6. Zależności między postaciami normalnymi . . . . . . . . . . . . . 197
3.8.7. Ćwiczenia do podrozdziału 3.8 . . . . . . . . . . . . . . . . . . . 198
3.9. Przykładowy schemat bazy danych. . . . . . . . . . . . . . . . 200
3.10. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
3.11. Literatura do rozdzialu 3 . . . . . . . . . . . . . . . . . . . . . 205
4 Działania w modelu relacyjnym . . . . . . . . . . . . . . . . . . . 206
4.1. Algebra dzialań na relacjach . . . . . . . . . . . . . . . . . . . 206
4.1.1. Działania teoriomnogościowe w zastosowaniu do relacji. . . . . . . 207
4.1.2. Rzutowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
4.1.3. Selekcja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
4.1.4. Iloczyn kartezjański . . . . . . . . . . . . . . . . . . . . . . . . 211
4.1.5. Złączenie naturalne. . . . . . . . . . . . . . . . . . . . . . . . . 212
4.1.6. Złączenie teta . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
4.1.7. Tworzenie zapytań z połączonych operacji . . . . . . . . . . . . . 216
4.1.8. Przemianowanie . . . . . . . . . . . . . . . . . . . . . . . . . . 219
4.1.9. Operacje zależne i niezależne . . . . . . . . . . . . . . . . . . . . 220
4.1.10. Ćwiczenia do podrodziału 4.1. . . . . . . . . . . . . . . . . . . . 221
4.2. Logika relacji. . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
4.2.1. Predykaty i atomy . . . . . . . . . . . . . . . . . . . . . . . . . 228
4.2.2. Atomy arytmetyczne . . . . . . . . . . . . . . . . . . . . . . . . 229
4.2.3. Reguły i zapytania w Datalogu . . . . . . . . . . . . . . . . . . . 229
4.2.4. Znaczenie reguł Datalogu. . . . . . . . . . . . . . . . . . . . . . 231
4.2.5. Predykaty ekstensjonalne i intensjonalne . . . . . . . . . . . . . . 234
4.2.6. Ćwiczenia do podrozdziału 4.2 . . . . . . . . . . . . . . . . . . . 235
4.3. Od algebry relacji do Datalogu . . . . . . . . . . . . . . . . . . 235 4.3.1. Przecięcie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
SPIS TREŚCI I 3
4.3.2. Suma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
4.3.3. Różnica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
4.3.4. Rzutowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
4.3.5. Selekcja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
4.3.6. Iloczyn kartezjański . . . . . . . . . . . . . . . . . . . . . . . . 240
4.3.7. Złączenia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
4.3.8. Symulowanie operacji złożonych w Datalogu . . . . . . . . . . . . 243
4.3.9. Ćwiczenia do podrozdziału 4.3 . . . . . . . . . . . . . . . . . . . 244
4.4. Programowanie rekurencyjne w Datalogu . . . . . . . . . . . . 245
4.4.1. OperatoY punktu stałego . . . . . . . . . . . . . . . . . . . . . . 247
4.4.2. Obliczanie najmniejszego punktu stałego . . . . . . . . . . . . . . 248
4.4.3. Równania z punktem stałym w Datalogu . . . . . . . . . . . . . . 250
4.4.4. Negacja w regułach rekurencyjnych. . . . . . . . . . . . . . . . . 255
4.4.5. Cwiczenia do podrozdziału 4.4 . . . . . . . . . . . . . . . . . . . 259
4.5. Więzy relacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
4.5.1. Algebra relacji jako język więzów . . . . . . . . . . . . . . . . . 261 4.5.2. Więzy integralności referencyjnej . . . . . . . . . . . . . . . . . . 261 4.5.3. Inne przykłady więzów . . . . . . . . . . . . . . . . . . . . . . . 263 4.5.4. Cwiczenia do podrozdziału 4.5 . . . . . . . . . . . . . . . . . . . 265
4.6. Operacje relacyjne na wielozbiorach . . . . . . . . . . . . . . . 267
4.6.1. Dlaczego wielozbiory? . . . . . . . . . . . . . . . . . . . . . . 267
4.6.2. Suma, przecięcie i różnica wielozbiorów . . . . . . . . . . . . . . 269
4.6.3. Rzutowanie wielozbiorów . . . . . . . . . . . . . . . . . . . . . 271
4.6.4. Operacja selekcji dla wielozbiorów . . . . . . . . . . . . . . . . . 272
4.6.5. Iloczyn kartezjański wielozbiorów . . . . . . . . . . . . . . . . . 272
4.6.6. Złączenia wielozbiorów . . . . . . . . . . . . . . . . . . . . . . 273
4.6.7. Zastosowanie reguł Datalogu do wielozbiorów . . . . . . . . . . . 274
4.6.8. Ćwiczenia do podrozdziału 4.6 . . . . . . . . . . . . . . . . . . . 276
4.7. Inne rozszerzenia modelu relacyjnego . . . . . . . . . . . . . . 277
4.7.1. Modyfikacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 4.7.2. Agregacje danych . . . . . . . . . . . . . . . . . . . . . . . . . 278 4.7.3. Perspektywy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 4.7.4. Wartości NULL . . . . . . . . . . . . . . . . . . . . . . . . . . 279
4.8. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 4.9. Literatura do rozdziału 4 . . . . . . . . . . . . . . . . . . . . . 280
5
Język baz danych SQL . . . . . . . . . . . . . . . . . . . . . . . . 282
5.1. Proste zapytania w języku SQL . . . . . . . . . . . . . . . . . . 283
5.1.1. Rzutowanie w języku SQI. . . . . . . . . . . . . . . . . . . . . . 285
5.1.2. Działanie selekcji w języku SQL . . . . . . . . . . . . . . . . . . 287
5. I .3. 1'orównvwanie tekstów . . . . . . . . . . . . . . . . . . . . . . . 289
5.1.4. Porównywanie daty i czasu . . . . . . . . . . . . . . . . . . . . . 291
5.1.5. Porządkowanie wyniku . . . . . . . . . . . . . . . . . . . . . . . 292
5.l .6. Ćwiczenia do podrozdziału 5.1 . . . . . . . . . . . . . . . . . . . 293
14
SPIS TREŚCI
5.2. Zapytania dotyczące więcej niż jednej relacji . . . . . . . . . . 295
5.2.1. Iloczyn kartezjański i złączenia w języku SQL . . . . . . . . . . . 295
5.2.2. Atrybuty nięjednoznaczne . . . . . . . . . . . . . . . . . . . . . 296
5.2.3. Zmienne krotkowe . . . . . . . . . . . . . . . . . . . . . . . . . 297
5.2.4. Wykonywanie zapytań obęjmujących wiele relacji . . . . . . . . . 299
5.2.5. Suma, przecięcie oraz różnica zapytań . . . . . . . . . . . . . . . 302
5.2.6. Ćwiczenia do podrozdziału 5.2 . . . . . . . . . . . . . . . . . . . 304
5.3. Podzapytania . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
5.3.1. Podzapytania, które umożliwiają obliczenie wartości skalarnych . . . 306 5.3.2. Warunki obejmujące relacje . . . . . . . . . . . . . . . . . . . . 308 5.3.3. Wyrażenia dotyczące krotek . . . . . . . . . . . . . . . . . . . . 308 5.3.4. Podzapytania skorelowane . . . . . . . . . . . . . . . . . . . . . 311 5.3.5. Ćwiczenia do podrozdziału 5.3 . . . . . . . . . . . . . . . . . . . 312
5.4. Powtórzenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
5.4.1. Eliminowanie powtórzeń . . . . . . . . . . . . . . . . . . . . . . 314
5.4.2. Powtórzenia w sumach, przecięciach oraz różnicach. . . . . . . . . 315
5.4.3. Ćwiczenia do podrozdziału 5.4 . . . . . . . . . . . . . . . . . . . 316
S.S. Agregowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
5.5.1. Operatory agregowania. . . . . . . . . . . . . . . . . . . . . . . 317
5.5.2. Grupowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
5.5.3. Klauzula HAVING . . . . . . . . . . . . . . . . . . . . . . . . . 321
5.5.4. Ćwiczenia do podrozdziału 5.5 . . . . . . . . . . . . . . . . . . . 322
5.6. Modyfikacje bazy danych . . . . . . . . . . . . . . . . . . . . . 323
5.6.1. Wstawianie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
5.6.2. Usuwanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
5.6.3. Aktualizacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
5.6.4. Ćwiczenia do podrozdziału 5.6 . . . . . . . . . . . . . . . . . . . 329
5.7. Definiowanie schematu relacji w języku SQL . . . . . . . . . . 330
5.7.1. Typy danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
5.7.2. Proste deklaracje tabel . . . . . . . . . . . . . . . . . . . . . . . 332
5.7.3. Usuwanie tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
5.7.4. Zmiany schematów relacji . . . . . . . . . . . . . . . . . . . . . 333
5.7.5. Wartości domniemane . . . . . . . . . . . . . . . . . . . . . . . 334
5.7.6. Dziedziny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
5.7.7. Indeksy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
5.7.8. Ćwiczenia do podrozdziału 5.7 . . . . . . . . . . . . . . . . . . . 339
5.8. Definiowanie perspektyw . . . . . . . . . . . . . . . . . . . . . 340
5.8.1. Deklarowanie perspektyw . . . . . . . . . . . . . . . . . . . . . 340
5.8.2. Zapytania określane na perspektywach . . . . . . . . . . . . . . . 341
5.8.3. Przemianowanie atrybutów . . . . . . . . . . . . . . . . . . . . . 344
5.8.4. Modyfikowanie perspektyw . . . . . . . . . . . . . . . . . . . . 344
5.8.5. Interpretowanie zapytań, które działają na perspektywach . . . . . . 348
5.8.6. Ćwiczenia do podrozdziału 5.8 . . . . . . . . . . . . . . . . . . . 351
5.9. Wartości NULL oraz złączenia zewnętrzne . . . . . . . . . . . 352
5.9.1. Działania na wartości NULL . . . . . . . . . . . . . . . . . . . . 352
SPIS TREŚCI I S
5.9.2. Wartość logiczna UNKNOWN . . . . . . . . . . . . . . . . . . . 354
5.9.3. Wyrażanie złączeń w języku SQL2 . . . . . . . . . . . . . . . . . 356
5.9.4. Złączenie naturalne. . . . . . . . . . . . . . . . . . . . . . . . . 357
5.9.5. Złączenia zewnętrzne. . . . . . . . . . . . . . . . . . . . . . . . 358
5.9.6. Ćwiczenia do podrozdziału 5.9 . . . . . . . . . . . . . . . . . . . 361
5.10. Rekurencja w języku SQL. . . . . . . . . . . . . . . . . . . . . 362
5.10.1. Definiowanie relacji typu IDB w języku SQL3 . . . . . . . . . . . 363
5.10.2. Rekurencja liniowa. . . . . . . . . . . . . . . . . . . . . . . . . 366
5.10.3. Instrukcja WITH i perspektywy. . . . . . . . . . . . . . . . . . . 367
5.10.4. Negacja warstwowa . . . . . . . . . . . . . . . . . . . . . . . . 368
5.10.5. Wyrażenia wątpliwe w języku SQL3 . . . . . . . . . . . . . . . . 370
5.10.6. Ćwiczenia do podrozdziału 5.10 . . . . . . . . . . . . . . . . . . 373
5.11. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 5.12. Literatura do rozdziału S . . . . . . . . . . . . . . . . . . . . . 376
6
Więzy i wyzwalacze w języku SQL. . . . . . . . . . . . . . . . . 378
6.1. Klucze w języku SQL . . . . . . . . . . . . . . . . . . . . . . . 379 6.1.l . Definiowanie kluczy . . . . . . . . . . . . . . . . . . . . . . . . 379 6.1.2. Wymuszanie więzów klucza . . . . . . . . . . . . . . . . . . . . 381 6.1.3. Ćwiczenia do podrozdziału 6.1 . . . . . . . . . . . . . . . . . . . 382
6.2. Integralność referencyjna i klucze obce . . . . . . . . . . . . . 382 6.2.1. Deklarowanie więzów klucza obcego . . . . . . . . . . . . . . . . 383 6.2.2. Przestrzeganie zasad więzów integralności referencyjnej. . . . . . . 385 6.2.3. Ćwiczenia do podrozdziału 6.2 . . . . . . . . . . . . . . . . . . . 387
6.3. Więzy wartości atrybutów. . . . . . . . . . . . . . . . . . . . . 388
6.3.1. Więzy NOT-NULL. . . . . . . . . . . . . . . . . . . . . . . . . 389 6.3.2. Więzy CHECK. . . . . . . . . . . . . . . . . . . . . . . . . . . 390 6.3.3. Więzy dziedziny . . . . . . . . . . . . . . . . . . . . . . . . . . 392 6.3.4. Ćwiczenia do podrozdziału 6.3 . . . . . . . . . . . . . . . . . . . 393
6.4. Więzy globalne. . . . . . . . . . . . . . . . . . . . . . . . . . . 394 6.4.1. Krotkowe więzy CHECK. . . . . . . . . . . . . . . . . . . . . . 394 6.4.2. Asercje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 6.4.3. Ćwiczenia do podrozdziału 6.4 . . . . . . . . . . . . . . . . . . . 399
6.5. Modyfikowanie więzów . . . . . . . . . . . . . . . . . . . . . . 401
6.5.1. Nadawanie nazw więzom. . . . . . . . . . . . . . . . . . . . . . 401
6.5.2. Modyfikowanie więzów określonych dla tabel . . . . . . . . . . . 402
6.5.3. Zmiany więzów dziedziny . . . . . . . . . . . . . . . . . . . . . 404
6.5.4. Modyfikowanie asercji . . . . . . . . . . . . . . . . . . . . . . . 404
6.5.5. Ćwiczenia do podrozdziału 6.5 . . . . . . . . . . . . . . . . . . . 405
6.6. Wyzwalacze w języku SQL3 . . . . . . . . . . . . . . . . . . . 405 6.6.1. Wyzwalacze a więzy . . . . . . . . . . . . . . . . . . . . . . . . 406 6.6.2. Wyzwalacze w języku SQL3 . . . . . . . . . . . . . . . . . . . . 407
16
SPIS TREŚCI
6.6.3. Asercje wjęzyku SQL3. . . . . . . . . . . . . . . . . . . . . . . 410 6.6.4. Ćwiczenia do podrozdziału 6.6 . . . . . . . . . . . . . . . . . . . 412
6.7. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 6.8. Literatura do rozdziału 6 . . . . . . . . . . . . . . . . . . . . . 414
Systemowe aspekty języka SQL. . . . . . . . . . . . . . . . . . . 415
7.1. SQL w środowisku programistycznym. . . . . . . . . . . . . . 415
7.1.1. Problem niedopasowania falowego . . . . . . . . . . . . . . . . . 417
7.1.2. Interfejs między językiem SQL i językiem podstawowym . . . . . . 418
7.1.3. Sekcja DECLARE . . . . . . . . . . . . . . . . . . . . . . . . . 418
7.1.4. Stosowanie zmiennych dzielonych . . . . . . . . . . . . . . . . . 419
7.1.5. Instrukcje wyboru pojedynczych wierszy . . . . . . . . . . . . . . 421
7.1.6. Kursory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
7.1.7. Dokonywanie modyfikacji za pomocą kursorów. . . . . . . . . . . 425
7.1.8. Opcje kursora . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
7.1.9. Określanie kolęjności wczytywania krotek . . . . . . . . . . . . . 427
7.1.10. Ochrona przed j ednoczesnymi modytikacj ami . . . . . . . . . . . . 428
7.1.11. Przewijanie kursora . . . . . . . . . . . . . . . . . . . . . . . . 429
7.1.12. Dynamiczny SQL . . . . . . . . . . . . . . . . . . . . . . . . . 430
7.1.13. Ćwiczenia do podrozdziału 7.1 . . . . . . . . . . . . . . . . . . . 432
7.2. Transakcje w języku SQL . . . . . . . . . . . . . . . . . . . . . 434
7.2.1. Szeregowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
7.2.2. Niepodzielność. . . . . . . . . . . . . . . . . . . . . . . . . . . 437
7.2.3. Transakcje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
7.2.4. Transakcje tylko do odczytu . . . . . . . . . . . . . . . . . . . . 440
7.2.5. Czytanie brudnopisu . . . . . . . . . . . . . . . . . . . . . . . . 442
7.2.6. Inne poziomy izolacji. . . . . . . . . . . . . . . . . . . . . . . . 444
7.2.7. Ćwiczenia do podrozdziału 7.2 . . . . . . . . . . . . . . . . . . . 446
7.3. Środowisko SQL . . . . . . . . . . . . . . . . . . . . . . . . . . 447
7.3.1. Srodowiska. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
7.3.2. Schematy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
7.3.3. Katalogi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
7.3.4. Klient-serwer w środowisku SQL . . . . . . . . . . . . . . . . . . 451
7.3.5. Połączenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
7.3.6. Sesje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
7.3.7. Moduły . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
7.4. Bezpieczeustwo i autoryzacja użytkownika w języku SQL2 . . 454
7.4.1. Prawa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
7.4.2. Tworzenie praw . . . . . . . . . . . . . . . . . . . . . . . . . . 455
7.4.3. Procedura sprawdzania praw dostępu . . . . . . . . . . . . . . . . 456
7.4.4. Nadawanie praw . . . . . . . . . . . . . . . . . . . . . . . . . . 458
7.4.5. Diagram GRANT . . . . . . . . . . . . . . . . . . . . . . . . . 460
7.4.6. Odbieranie praw . . . . . . . . . . . . . . . . . . . . . . . . . . 461
7.4.7. Ćwiczenia do podrozdziału 7.4 . . . . . . . . . . . . . . . . . . . 465
SPIS TRESCI I %
7.5. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 7.6. Literatura do rozdziału 7 . . . . . . . . . . . . . . . . . . . . . 468
ó
Zorientowane obiektowo języki zapytań . . . . . . . . . . . . . . 469
8.1. Elem enty zapytań w języku ODL. . . . . . . . . . . . . . . . . 470
8.1.1. Działania na obiektach . . . . . . . . . . . . . . . . . . . . . . . 470
8.1.2. Deklarowanie sygnatur metod . . . . . . . . . . . . . . . . . . . 471
8.1.3. Zasięg klasy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
8.1.4. Cwiczenia do podrozdziału 8.1 . . . . . . . . . . . . . . . . . . . 474
8.2. Wprowadzenie do języka OQL . . . . . . . . . . . . . . . . . . 476
8.2.1. Obiektowa wersja przykładu filmowego. . . . . . . . . . . . . . . 477
8.2.2. System typów . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
8.2.3. Wyrażenia ścieżkowe. . . . . . . . . . . . . . . . . . . . . . . . 479
8.2.4. Wyrażenia typu Select-Prom-Where . . . . . . . . . . . . . . . . 480
8.2.5. Eliminowanie powtórzeń . . . . . . . . . . . . . . . . . . . . . . 482
8.2.6. Złożone typy wyjścia. . . . . . . . . . . . . . . . . . . . . . . . 482
8.2.7. Podzapytania. . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
8.2.8. Porządkowanie wyniku . . . . . . . . . . . . . . . . . . . . . . . 484
8.2.9. Ćwiczenia do podrozdziału 8.2 . . . . . . . . . . . . . . . . . . . 485
8.3. Dodatkowe postacie wyrażeń w języku OQL . . . . . . . . . . 486
8.3.1. Wyrażenia kwantyfikowane . . . . . . . . . . . . . . . . . . . . 486
8.3.2. Wyrażenia agregujące . . . . . . . . . . . . . . . . . . . . . . . 487
8.3.3. Wyrażenia GROUP BY . . . . . . . . . . . . . . . . . . . . . . 488
8.3.4. Klauzula HAVING . . . . . . . . . . . . . . . . . . . . . . . . . 491
8.3.5. Operatory algebry zbiorów . . . . . . . . . . . . . . . . . . . . . 491
8.3.6. Ćwiczenia do podrozdziału 8.3 . . . . . . . . . . . . . . . . . . . 493
8.4. Tworzenie i przypisywanie obiektów w języku OQL . . . . . . 493
8.4.1. Przypisywanie wartości zmiennym języka podstawowego . . . . . . 494
8.4.2. Wydobywanie elementu z kolekcji . . . . . . . . . . . . . . . . . 494
8.4.3. Wydobywanie poszczególnych elementów kolekcji . . . . . . . . . 495
8.4.4. Tworzenie nowych obiektów . . . . . . . . . . . . . . . . . . . . 496
8.4.5. Ćwiczenia do podrozdziału 8.4 . . . . . . . . . . . . . . . . . . . 498
8.5. Obiekty krotkowe w języku SQL3 . . . . . . . . . . . . . . . . 499
8.5.1. Typ wiersza . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
8.5.2. Deklarowanie relacji z typem wiersza. . . . . . . . . . . . . . . . 501
8.5.3. Dostęp do składowych typu wiersza. . . . . . . . . . . . . . . . . 501
8.5.4. Referencje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
8.5.5. Następstwo referencji. . . . . . . . . . . . . . . . . . . . . . . . 504
8.5.6. Zakres referencji . . . . . . . . . . . . . . . . . . . . . . . . . . 505
8.5.7. Identyfikatory obiektów jako wartości . . . . . . . . . . . . . . . 506
8.5.8. Ćwiczenia do podrozdziału 8.5 . . . . . . . . . . . . . . . . . . . 509
8.6. Abstrakcyjne typy danych w języku SQL3 . . . . . . . . . . . 510 8.6.1. Definiowanie abstrakcyjnych typów danych. . . . . . . . . . . . . 510 8.6.2. Definiowanie metod dla typów ADT . . . . . . . . . . . . . . . . 514
18
SPIS TREŚCI
8.6.3. Funkcje zewnętrzne . . . . . . . . . . . . . . . . . . . . . . . . 517 8.6.4. Ćwiczenia do podrozdziału 8.6 . . . . . . . . . . . . . . . . . . . 518
8.7. Porównanie koncepcji systemów ODL/OQL i SQL3 . . . . . . 519 8.8. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 8.9. Literatura do rozdziału 8 . . . . . . . . . . . . . . . . . . . . . 522 Skorowidz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
1.1. Ewolucja systemów baz danych . . . . . . . . . . . . . . . . . 19
1.1.1. Pierwsze systemy zarządzania bazami danych . . . . . . . . . . . . 20
1.1.2. Relacyjne systemy baz danych . . . . . . . . . . . . . . . . . . . 22
1.1.3. Coraz mnięjsze systemy . . . . . . . . . . . . . . . . . . . . . . 24
1.1.4. Coraz większe systemy . . . . . . . . . . . . . . . . . . . . . . 24
1.2. Architektura systemu DBMS . . . . . . . . . . . . . . . . . . . 25
1.2.1. Przegląd składowych systemu DBMS . . . . . . . . . . . . . . . 26
1.2.2. Moduł zarządzania pamięcią. . . . . . . . . . . . . . . . . . . . 28
1.2.3. Moduł zarządzania zapytaniami . . . . . . . . . . . . . . . . . . 29
1.2.4. Moduł zarządzania transakcjami . . . . . . . . . . . . . . . . . . 30
1.2.5. Architektura klient-serwer. . . . . . . . . . . . . . . . . . . . . 33
1.3. Przyszłość systemów baz danych . . . . . . . . . . . . . . . . . 34
1.3.1. Typy, klasy i obiekty . . . . . . . . . . . . . . . . . . . . . . . 34
1.3.2. Więzy i wyzwalacze . . . . . . . . . . . . . . . . . . . . . . . 38
1.3.3. Dane multimedialne . . . . . . . . . . . . . . . . . . . . . . . 39
1.3.4. Integracja danych. . . . . . . . . . . . . . . . . . . . . . . . . 40
1.4. Układ książki . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.4.1. Projektowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1.4.2. Programowanie. . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1.5. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
1.6. Literatura do rozdziału 1 . . . . . . . . . . . . . . . . . . . . . 45
2
Modelowanie baz danych . . . . . . . . . . . . . . . . . . . . . . . 46
2.1. Wprowadzenie do języka ODL . . . . . . . . . . . . . . . . . . 47 2.1.1. Projektowanie zorientowane obiektowo . . . . . . . . . . . . . . . 48
10
SPIS TREŚCI
2.1.2. Deklaracje interfejsu . . . . . . . . . . . . . . . . . . . . . . . . 50 2.1.3. Atrybuty w języku ODL . . . . . . . . . . . . . . . . . . . . . . 50 2.1.4. Związki wjęzyku ODL. . . . . . . . . . . . . . . . . . . . . . . 52 2.1.5. Związki odwrotne . . . . . . . . . . . . . . . . . . . . . . . . . 53 2.1.6. Liczebność związków . . . . . . . . . . . . . . . . . . . . . . . 55 2.1.7. Typy wjęzYku ODL . . . . . . . . . . . . . . . . . . . . . . . . 58 2.1.8. Ćwiczenia do podrozdziału 2.1 . . . . . . . . . . . . . . . . . . . 60
2.2. Diagramy związków encji . . . . . . . . . . . . . . . . . . . . 62
2.2.1. Liczebność związków encji . . . . . . . . . . . . . . . . . . . . . 64
2.2.2. Związki wieloargumentowe. . . . . . . . . . . . . . . . . . . . . 65
2.2.3. Role w związkach . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.2.4. Atrybuty związków. . . . . . . . . . . . . . . . . . . . . . . . . 68
2.2.5. Przekształcanie związków wieloargumentowych w binarne . . . . . 70
2.2.6. Ćwiczenia do podrozdziału 2.2 . . . . . . . . . . . . . . . . . . . 72
2.3. Zasady projektowania . . . . . . . . . . . . . . . . . . . . . . . 73
2.3.1. Dokładność . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
2.3.2. Unikanie redundancji. . . . . . . . . . . . . . . . . . . . . . . . 74
2.3.3. Prostota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
2.3.4. Dobór właściwych elementów . . . . . . . . . . . . . . . . . . . 76
2.3.5. Ćwiczenia do podrozdziału 2.3 . . . . . . . . . . . . . . . . . . . 78
2.4. Podk lasy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2.4.1. Podklasy w systemie ODL . . . . . . . . . . . . . . . . . . . . . 81
2.4.2. Dziedziczenie wielokrotne w języku ODL. . . . . . . . . . . . . . 81
2.4.3. Podklasy w diagramach związków encji. . . . . . . . . . . . . . . 84
2.4.4. Dziedziczenie w modelach związków encji . . . . . . . . . . . . . 85
2.4.5. Ćwiczenia do podrozdziału 2.4 . . . . . . . . . . . . . . . . . . . 86
2.5. Modelowanie więzów . . . . . . . . . . . . . . . . . . . . . . . 87
2.5.1. Klucze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
2.5.2. Deklarowanie kluczy wjęzyku ODL . . . . . . . . . . . . . . . . 90
2.5.3. Reprezentowanie kluczy w modelu związków encji . . . . . . . . . 91
2.5.4. Więzy jednoznaczności. . . . . . . . . . . . . . . . . . . . . . . 92
2.5.5. Integralność referencyjna . . . . . . . . . . . . . . . . . . . . . . 93
2.5.6. Integralność referencyjna w diagramach związków encji. . . . . . . 94
2.5.7. Inne rodzaje więzów . . . . . . . . . . . . . . . . . . . . . . . . 95
2.5.8. Ćwiczenia do podrozdziału 2.5 . . . . . . . . . . . . . . . . . . . 96
2.6. Zbiory słabych encji . . . . . . . . . . . . . . . . . . . . . . . . 97
2.6.1. Przyczyny zbiorów słabych encji . . . . . . . . . . . . . . . . . . 97
2.6.2. Wymagania dla zbiorów słabych encji . . . . . . . . . . . . . . . 99
2.6.3. Notacja zbiorów słabych encji . . . . . . . . . . . . . . . . . . . 101
2.6.4. Ćwiczenia do podrozdziału 2.6 . . . . . . . . . . . . . . . . . . . 101
2.7. Modele o znaczeniu historycznym . . . . . . . . . . . . . . . . 102 "
2.7.1. Model sieciowy . . . . . . . . . . . . . . . . . . . . . . . . . . 102 2.7.2. Schematy reprezentacji sieci . . . . . . . . . . . . . . . . . . . . 104 2.7.3. Model hierarchiczny . . . . . . . . . . . . . . . . . . . . . . . . 105 2.7.4. Ćwiczenia do podrozdziału 2.7 . . . . . . . . . . . . . . . . . . . 107
SPIS TREŚCI
11
2.8. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 2.9. Literatura do rozdziału 2 . . . . . . . . . . . . . . . . . . . . . 109
3
Relacyjny model danych . . . . . . . . . . . . . . . . . . . . . . . 110
3.1. Podstawy modeli relacyjnych . . . . . . . . . . . . . . . . . . . 110
3.1.1. Atrybuty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
3.1.2. Schematy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
3.1.3. Krotki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.1.4. Dziedziny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
3.1.5. Równoważne sposoby reprezentowania relacji . . . . . . . . . . . 1 13
3.1.6. Instancje relacji . . . . . . . . . . . . . . . . . . . . . . . . . . 115
3.1.7. Ćwiczenia do podrozdziału 3.1 . . . . . . . . . . . . . . . . . . . 116
3.2. Od projektów ODL do projektów relacyjnych . . . . . . . . . . 116
3.2.1. Od atrybutów wjęzyku ODL do atrybutów relacji. . . . . . . . . . 117
3.2.2. Atrybuty nieatomowe w klasach . . . . . . . . . . . . . . . . . . 118
3.2.3. Reprezentowanie konstruktorów innych typów . . . . . . . . . . . 122
3.2.4. Reprezentowanie relacji jednowartościowych . . . . . . . . . . . . 123
3.2.5. Reprezentowanie związków wielowartościowych . . . . . . . . . . 125
3.2.6. A gdy nie ma klucza... . . . . . . . . . . . . . . . . . . . . . . 127
3.2.7. Reprezentowanie relacji oraz jej odwrotności . . . . . . . . . . . . 128
3.2.8. Ćwiczenia do podrozdziału 3.2 . . . . . . . . . . . . . . . . . . . 129
3.3. Od diagramów związków encji do projektów relacyjnych . . . 131
3.3.1. Od zbiorów encji do relacji . . . . . . . . . . . . . . . . . . . . . 132
3.3.2. Od związków encji do relacji . . . . . . . . . . . . . . . . . . . . 133
3.3.3. Zasady postępowania ze słabymi zbiorami encji . . . . . . . . . . . 136
3.3.4. Ćwiczenia do podrozdziału 3.3 . . . . . . . . . . . . . . . . . . . 139
3.4. Przekształcanie struktur podklas do postaci relacji . . . . . . . 140
3.4.1. Relacyjne reprezentacje podklas z modelu ODL. . . . . . . . . . . 141
3.4.2. Reprezentowanie związków isa w modelu relacyjnym . . . . . . . . 142
3.4.3. Porównanie różnych metod . . . . . . . . . . . . . . . . . . . . . 143
3.4.4. Tworzenie relacji z wartościami pustymi . . . . . . . . . . . . . . 144
3.4.5. Ćwiczenia do podrozdziału 3.4 . . . . . . . . . . . . . . . . . . . 145
3.5. Zależności funkcyjne . . . . . . . . . . . . . . . . . . . . . . . 147
3.5.1. Definicja zależności funkcyjnych . . . . . . . . . . . . . . . . . . 147
3.5.2. Klucze relacji . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
3.5.3. Nadklucze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
3.5.4. Wykrywanie kluczy w relacji . . . . . . . . . . . . . . . . . . . . 152
3.5.5. Klucze relacji powstających z opisów wjęzyku ODL . . . . . . . . 154
3.5.6. Ćwiczenia do podrozdziału 3.5 . . . . . . . . . . . . . . . . . . . 156
3.6. Regu ły dotyczące zależności funkcyjnych . . . . . . . . . . . . 156
3.6.1. Zasady podziału i łączenia . . . . . . . . . . . . . . . . . . . . . 157
3.6.2. Zależności trywialne . . . . . . . . . . . . . . . . . . . . . . . . 159
3.6.3. Obliczanie domknięcia zbioru atrybutów . . . . . . . . . . . . . . 160
3.6.4. Reguła przechodniości . . . . . . . . . . . . . . . . . . . . . . . 163
12
SPIS TREŚCI
3.6.5. Domknięcie zbioru zależności funkcyjnych . . . . . . . . . . . . . 165
3.6.6. Ćwiczenie do podrozdziału 3.6 . . . . . . . . . . . . . . . . . . . 166
3.7. Proje ktowanie relacyjnych schematów baz danych . . . . . . . 168
3.7.1. Anomalie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
3.7.2. Dekompozycja relacji . . . . . . . . . . . . . . . . . . . . . . . 170
3.7.3. Postać normalna Boyce'a-Codda . . . . . . . . . . . . . . . . . . 172
3.7.4. Dekompozycja do postaci BCNF . . . . . . . . . . . . . . . . . . 174
3.7.5. Projektowanie zależności funkcyjnych . . . . . . . . . . . . . . . 180
3.7.6. Odzyskiwanie danych po dekompozycji. . . . . . . . . . . . . . . 181
3.7.7. Trzecia postać normalna . . . . . . . . . . . . . . . . . . . . . . 184
3.7.8. Ćwiczenia do podrozdziału 3.7 . . . . . . . . . . . . . . . . . . . 187
3.8. Zależności wielowartościowe . . . . . . . . . . . . . . . . . . . 188
3.8.1. Niezależność atrybutów i wynikająca stąd redundancja . . . . . . . 188
3.8.2. Definicja zależności wielowartościowych . . . . . . . . . . . . . . 190
3.8.3. Wnioskowanie z zależności wielowartościowych . . . . . . . . . . 192
3.8.4. Czwarta postać normalna . . . . . . . . . . . . . . . . . . . . . . 194
3.8.5. Dekompozycja do czwartej postaci normalnęj . . . . . . . . . . . . 195
3.8.6. Zależności między postaciami normalnymi . . . . . . . . . . . . . 197
3.8.7. Ćwiczenia do podrozdziału 3.8 . . . . . . . . . . . . . . . . . . . 198
3.9. Przykładowy schemat bazy danych. . . . . . . . . . . . . . . . 200
3.10. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
3.11. Literatura do rozdzialu 3 . . . . . . . . . . . . . . . . . . . . . 205
4 Działania w modelu relacyjnym . . . . . . . . . . . . . . . . . . . 206
4.1. Algebra dzialań na relacjach . . . . . . . . . . . . . . . . . . . 206
4.1.1. Działania teoriomnogościowe w zastosowaniu do relacji. . . . . . . 207
4.1.2. Rzutowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
4.1.3. Selekcja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
4.1.4. Iloczyn kartezjański . . . . . . . . . . . . . . . . . . . . . . . . 211
4.1.5. Złączenie naturalne. . . . . . . . . . . . . . . . . . . . . . . . . 212
4.1.6. Złączenie teta . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
4.1.7. Tworzenie zapytań z połączonych operacji . . . . . . . . . . . . . 216
4.1.8. Przemianowanie . . . . . . . . . . . . . . . . . . . . . . . . . . 219
4.1.9. Operacje zależne i niezależne . . . . . . . . . . . . . . . . . . . . 220
4.1.10. Ćwiczenia do podrodziału 4.1. . . . . . . . . . . . . . . . . . . . 221
4.2. Logika relacji. . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
4.2.1. Predykaty i atomy . . . . . . . . . . . . . . . . . . . . . . . . . 228
4.2.2. Atomy arytmetyczne . . . . . . . . . . . . . . . . . . . . . . . . 229
4.2.3. Reguły i zapytania w Datalogu . . . . . . . . . . . . . . . . . . . 229
4.2.4. Znaczenie reguł Datalogu. . . . . . . . . . . . . . . . . . . . . . 231
4.2.5. Predykaty ekstensjonalne i intensjonalne . . . . . . . . . . . . . . 234
4.2.6. Ćwiczenia do podrozdziału 4.2 . . . . . . . . . . . . . . . . . . . 235
4.3. Od algebry relacji do Datalogu . . . . . . . . . . . . . . . . . . 235 4.3.1. Przecięcie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
SPIS TREŚCI I 3
4.3.2. Suma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
4.3.3. Różnica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
4.3.4. Rzutowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
4.3.5. Selekcja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
4.3.6. Iloczyn kartezjański . . . . . . . . . . . . . . . . . . . . . . . . 240
4.3.7. Złączenia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
4.3.8. Symulowanie operacji złożonych w Datalogu . . . . . . . . . . . . 243
4.3.9. Ćwiczenia do podrozdziału 4.3 . . . . . . . . . . . . . . . . . . . 244
4.4. Programowanie rekurencyjne w Datalogu . . . . . . . . . . . . 245
4.4.1. OperatoY punktu stałego . . . . . . . . . . . . . . . . . . . . . . 247
4.4.2. Obliczanie najmniejszego punktu stałego . . . . . . . . . . . . . . 248
4.4.3. Równania z punktem stałym w Datalogu . . . . . . . . . . . . . . 250
4.4.4. Negacja w regułach rekurencyjnych. . . . . . . . . . . . . . . . . 255
4.4.5. Cwiczenia do podrozdziału 4.4 . . . . . . . . . . . . . . . . . . . 259
4.5. Więzy relacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
4.5.1. Algebra relacji jako język więzów . . . . . . . . . . . . . . . . . 261 4.5.2. Więzy integralności referencyjnej . . . . . . . . . . . . . . . . . . 261 4.5.3. Inne przykłady więzów . . . . . . . . . . . . . . . . . . . . . . . 263 4.5.4. Cwiczenia do podrozdziału 4.5 . . . . . . . . . . . . . . . . . . . 265
4.6. Operacje relacyjne na wielozbiorach . . . . . . . . . . . . . . . 267
4.6.1. Dlaczego wielozbiory? . . . . . . . . . . . . . . . . . . . . . . 267
4.6.2. Suma, przecięcie i różnica wielozbiorów . . . . . . . . . . . . . . 269
4.6.3. Rzutowanie wielozbiorów . . . . . . . . . . . . . . . . . . . . . 271
4.6.4. Operacja selekcji dla wielozbiorów . . . . . . . . . . . . . . . . . 272
4.6.5. Iloczyn kartezjański wielozbiorów . . . . . . . . . . . . . . . . . 272
4.6.6. Złączenia wielozbiorów . . . . . . . . . . . . . . . . . . . . . . 273
4.6.7. Zastosowanie reguł Datalogu do wielozbiorów . . . . . . . . . . . 274
4.6.8. Ćwiczenia do podrozdziału 4.6 . . . . . . . . . . . . . . . . . . . 276
4.7. Inne rozszerzenia modelu relacyjnego . . . . . . . . . . . . . . 277
4.7.1. Modyfikacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 4.7.2. Agregacje danych . . . . . . . . . . . . . . . . . . . . . . . . . 278 4.7.3. Perspektywy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 4.7.4. Wartości NULL . . . . . . . . . . . . . . . . . . . . . . . . . . 279
4.8. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 4.9. Literatura do rozdziału 4 . . . . . . . . . . . . . . . . . . . . . 280
5
Język baz danych SQL . . . . . . . . . . . . . . . . . . . . . . . . 282
5.1. Proste zapytania w języku SQL . . . . . . . . . . . . . . . . . . 283
5.1.1. Rzutowanie w języku SQI. . . . . . . . . . . . . . . . . . . . . . 285
5.1.2. Działanie selekcji w języku SQL . . . . . . . . . . . . . . . . . . 287
5. I .3. 1'orównvwanie tekstów . . . . . . . . . . . . . . . . . . . . . . . 289
5.1.4. Porównywanie daty i czasu . . . . . . . . . . . . . . . . . . . . . 291
5.1.5. Porządkowanie wyniku . . . . . . . . . . . . . . . . . . . . . . . 292
5.l .6. Ćwiczenia do podrozdziału 5.1 . . . . . . . . . . . . . . . . . . . 293
14
SPIS TREŚCI
5.2. Zapytania dotyczące więcej niż jednej relacji . . . . . . . . . . 295
5.2.1. Iloczyn kartezjański i złączenia w języku SQL . . . . . . . . . . . 295
5.2.2. Atrybuty nięjednoznaczne . . . . . . . . . . . . . . . . . . . . . 296
5.2.3. Zmienne krotkowe . . . . . . . . . . . . . . . . . . . . . . . . . 297
5.2.4. Wykonywanie zapytań obęjmujących wiele relacji . . . . . . . . . 299
5.2.5. Suma, przecięcie oraz różnica zapytań . . . . . . . . . . . . . . . 302
5.2.6. Ćwiczenia do podrozdziału 5.2 . . . . . . . . . . . . . . . . . . . 304
5.3. Podzapytania . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
5.3.1. Podzapytania, które umożliwiają obliczenie wartości skalarnych . . . 306 5.3.2. Warunki obejmujące relacje . . . . . . . . . . . . . . . . . . . . 308 5.3.3. Wyrażenia dotyczące krotek . . . . . . . . . . . . . . . . . . . . 308 5.3.4. Podzapytania skorelowane . . . . . . . . . . . . . . . . . . . . . 311 5.3.5. Ćwiczenia do podrozdziału 5.3 . . . . . . . . . . . . . . . . . . . 312
5.4. Powtórzenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
5.4.1. Eliminowanie powtórzeń . . . . . . . . . . . . . . . . . . . . . . 314
5.4.2. Powtórzenia w sumach, przecięciach oraz różnicach. . . . . . . . . 315
5.4.3. Ćwiczenia do podrozdziału 5.4 . . . . . . . . . . . . . . . . . . . 316
S.S. Agregowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
5.5.1. Operatory agregowania. . . . . . . . . . . . . . . . . . . . . . . 317
5.5.2. Grupowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
5.5.3. Klauzula HAVING . . . . . . . . . . . . . . . . . . . . . . . . . 321
5.5.4. Ćwiczenia do podrozdziału 5.5 . . . . . . . . . . . . . . . . . . . 322
5.6. Modyfikacje bazy danych . . . . . . . . . . . . . . . . . . . . . 323
5.6.1. Wstawianie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
5.6.2. Usuwanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
5.6.3. Aktualizacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
5.6.4. Ćwiczenia do podrozdziału 5.6 . . . . . . . . . . . . . . . . . . . 329
5.7. Definiowanie schematu relacji w języku SQL . . . . . . . . . . 330
5.7.1. Typy danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
5.7.2. Proste deklaracje tabel . . . . . . . . . . . . . . . . . . . . . . . 332
5.7.3. Usuwanie tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
5.7.4. Zmiany schematów relacji . . . . . . . . . . . . . . . . . . . . . 333
5.7.5. Wartości domniemane . . . . . . . . . . . . . . . . . . . . . . . 334
5.7.6. Dziedziny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
5.7.7. Indeksy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
5.7.8. Ćwiczenia do podrozdziału 5.7 . . . . . . . . . . . . . . . . . . . 339
5.8. Definiowanie perspektyw . . . . . . . . . . . . . . . . . . . . . 340
5.8.1. Deklarowanie perspektyw . . . . . . . . . . . . . . . . . . . . . 340
5.8.2. Zapytania określane na perspektywach . . . . . . . . . . . . . . . 341
5.8.3. Przemianowanie atrybutów . . . . . . . . . . . . . . . . . . . . . 344
5.8.4. Modyfikowanie perspektyw . . . . . . . . . . . . . . . . . . . . 344
5.8.5. Interpretowanie zapytań, które działają na perspektywach . . . . . . 348
5.8.6. Ćwiczenia do podrozdziału 5.8 . . . . . . . . . . . . . . . . . . . 351
5.9. Wartości NULL oraz złączenia zewnętrzne . . . . . . . . . . . 352
5.9.1. Działania na wartości NULL . . . . . . . . . . . . . . . . . . . . 352
SPIS TREŚCI I S
5.9.2. Wartość logiczna UNKNOWN . . . . . . . . . . . . . . . . . . . 354
5.9.3. Wyrażanie złączeń w języku SQL2 . . . . . . . . . . . . . . . . . 356
5.9.4. Złączenie naturalne. . . . . . . . . . . . . . . . . . . . . . . . . 357
5.9.5. Złączenia zewnętrzne. . . . . . . . . . . . . . . . . . . . . . . . 358
5.9.6. Ćwiczenia do podrozdziału 5.9 . . . . . . . . . . . . . . . . . . . 361
5.10. Rekurencja w języku SQL. . . . . . . . . . . . . . . . . . . . . 362
5.10.1. Definiowanie relacji typu IDB w języku SQL3 . . . . . . . . . . . 363
5.10.2. Rekurencja liniowa. . . . . . . . . . . . . . . . . . . . . . . . . 366
5.10.3. Instrukcja WITH i perspektywy. . . . . . . . . . . . . . . . . . . 367
5.10.4. Negacja warstwowa . . . . . . . . . . . . . . . . . . . . . . . . 368
5.10.5. Wyrażenia wątpliwe w języku SQL3 . . . . . . . . . . . . . . . . 370
5.10.6. Ćwiczenia do podrozdziału 5.10 . . . . . . . . . . . . . . . . . . 373
5.11. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 5.12. Literatura do rozdziału S . . . . . . . . . . . . . . . . . . . . . 376
6
Więzy i wyzwalacze w języku SQL. . . . . . . . . . . . . . . . . 378
6.1. Klucze w języku SQL . . . . . . . . . . . . . . . . . . . . . . . 379 6.1.l . Definiowanie kluczy . . . . . . . . . . . . . . . . . . . . . . . . 379 6.1.2. Wymuszanie więzów klucza . . . . . . . . . . . . . . . . . . . . 381 6.1.3. Ćwiczenia do podrozdziału 6.1 . . . . . . . . . . . . . . . . . . . 382
6.2. Integralność referencyjna i klucze obce . . . . . . . . . . . . . 382 6.2.1. Deklarowanie więzów klucza obcego . . . . . . . . . . . . . . . . 383 6.2.2. Przestrzeganie zasad więzów integralności referencyjnej. . . . . . . 385 6.2.3. Ćwiczenia do podrozdziału 6.2 . . . . . . . . . . . . . . . . . . . 387
6.3. Więzy wartości atrybutów. . . . . . . . . . . . . . . . . . . . . 388
6.3.1. Więzy NOT-NULL. . . . . . . . . . . . . . . . . . . . . . . . . 389 6.3.2. Więzy CHECK. . . . . . . . . . . . . . . . . . . . . . . . . . . 390 6.3.3. Więzy dziedziny . . . . . . . . . . . . . . . . . . . . . . . . . . 392 6.3.4. Ćwiczenia do podrozdziału 6.3 . . . . . . . . . . . . . . . . . . . 393
6.4. Więzy globalne. . . . . . . . . . . . . . . . . . . . . . . . . . . 394 6.4.1. Krotkowe więzy CHECK. . . . . . . . . . . . . . . . . . . . . . 394 6.4.2. Asercje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 6.4.3. Ćwiczenia do podrozdziału 6.4 . . . . . . . . . . . . . . . . . . . 399
6.5. Modyfikowanie więzów . . . . . . . . . . . . . . . . . . . . . . 401
6.5.1. Nadawanie nazw więzom. . . . . . . . . . . . . . . . . . . . . . 401
6.5.2. Modyfikowanie więzów określonych dla tabel . . . . . . . . . . . 402
6.5.3. Zmiany więzów dziedziny . . . . . . . . . . . . . . . . . . . . . 404
6.5.4. Modyfikowanie asercji . . . . . . . . . . . . . . . . . . . . . . . 404
6.5.5. Ćwiczenia do podrozdziału 6.5 . . . . . . . . . . . . . . . . . . . 405
6.6. Wyzwalacze w języku SQL3 . . . . . . . . . . . . . . . . . . . 405 6.6.1. Wyzwalacze a więzy . . . . . . . . . . . . . . . . . . . . . . . . 406 6.6.2. Wyzwalacze w języku SQL3 . . . . . . . . . . . . . . . . . . . . 407
16
SPIS TREŚCI
6.6.3. Asercje wjęzyku SQL3. . . . . . . . . . . . . . . . . . . . . . . 410 6.6.4. Ćwiczenia do podrozdziału 6.6 . . . . . . . . . . . . . . . . . . . 412
6.7. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 6.8. Literatura do rozdziału 6 . . . . . . . . . . . . . . . . . . . . . 414
Systemowe aspekty języka SQL. . . . . . . . . . . . . . . . . . . 415
7.1. SQL w środowisku programistycznym. . . . . . . . . . . . . . 415
7.1.1. Problem niedopasowania falowego . . . . . . . . . . . . . . . . . 417
7.1.2. Interfejs między językiem SQL i językiem podstawowym . . . . . . 418
7.1.3. Sekcja DECLARE . . . . . . . . . . . . . . . . . . . . . . . . . 418
7.1.4. Stosowanie zmiennych dzielonych . . . . . . . . . . . . . . . . . 419
7.1.5. Instrukcje wyboru pojedynczych wierszy . . . . . . . . . . . . . . 421
7.1.6. Kursory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
7.1.7. Dokonywanie modyfikacji za pomocą kursorów. . . . . . . . . . . 425
7.1.8. Opcje kursora . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
7.1.9. Określanie kolęjności wczytywania krotek . . . . . . . . . . . . . 427
7.1.10. Ochrona przed j ednoczesnymi modytikacj ami . . . . . . . . . . . . 428
7.1.11. Przewijanie kursora . . . . . . . . . . . . . . . . . . . . . . . . 429
7.1.12. Dynamiczny SQL . . . . . . . . . . . . . . . . . . . . . . . . . 430
7.1.13. Ćwiczenia do podrozdziału 7.1 . . . . . . . . . . . . . . . . . . . 432
7.2. Transakcje w języku SQL . . . . . . . . . . . . . . . . . . . . . 434
7.2.1. Szeregowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
7.2.2. Niepodzielność. . . . . . . . . . . . . . . . . . . . . . . . . . . 437
7.2.3. Transakcje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
7.2.4. Transakcje tylko do odczytu . . . . . . . . . . . . . . . . . . . . 440
7.2.5. Czytanie brudnopisu . . . . . . . . . . . . . . . . . . . . . . . . 442
7.2.6. Inne poziomy izolacji. . . . . . . . . . . . . . . . . . . . . . . . 444
7.2.7. Ćwiczenia do podrozdziału 7.2 . . . . . . . . . . . . . . . . . . . 446
7.3. Środowisko SQL . . . . . . . . . . . . . . . . . . . . . . . . . . 447
7.3.1. Srodowiska. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
7.3.2. Schematy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
7.3.3. Katalogi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
7.3.4. Klient-serwer w środowisku SQL . . . . . . . . . . . . . . . . . . 451
7.3.5. Połączenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
7.3.6. Sesje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
7.3.7. Moduły . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
7.4. Bezpieczeustwo i autoryzacja użytkownika w języku SQL2 . . 454
7.4.1. Prawa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
7.4.2. Tworzenie praw . . . . . . . . . . . . . . . . . . . . . . . . . . 455
7.4.3. Procedura sprawdzania praw dostępu . . . . . . . . . . . . . . . . 456
7.4.4. Nadawanie praw . . . . . . . . . . . . . . . . . . . . . . . . . . 458
7.4.5. Diagram GRANT . . . . . . . . . . . . . . . . . . . . . . . . . 460
7.4.6. Odbieranie praw . . . . . . . . . . . . . . . . . . . . . . . . . . 461
7.4.7. Ćwiczenia do podrozdziału 7.4 . . . . . . . . . . . . . . . . . . . 465
SPIS TRESCI I %
7.5. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 7.6. Literatura do rozdziału 7 . . . . . . . . . . . . . . . . . . . . . 468
ó
Zorientowane obiektowo języki zapytań . . . . . . . . . . . . . . 469
8.1. Elem enty zapytań w języku ODL. . . . . . . . . . . . . . . . . 470
8.1.1. Działania na obiektach . . . . . . . . . . . . . . . . . . . . . . . 470
8.1.2. Deklarowanie sygnatur metod . . . . . . . . . . . . . . . . . . . 471
8.1.3. Zasięg klasy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
8.1.4. Cwiczenia do podrozdziału 8.1 . . . . . . . . . . . . . . . . . . . 474
8.2. Wprowadzenie do języka OQL . . . . . . . . . . . . . . . . . . 476
8.2.1. Obiektowa wersja przykładu filmowego. . . . . . . . . . . . . . . 477
8.2.2. System typów . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
8.2.3. Wyrażenia ścieżkowe. . . . . . . . . . . . . . . . . . . . . . . . 479
8.2.4. Wyrażenia typu Select-Prom-Where . . . . . . . . . . . . . . . . 480
8.2.5. Eliminowanie powtórzeń . . . . . . . . . . . . . . . . . . . . . . 482
8.2.6. Złożone typy wyjścia. . . . . . . . . . . . . . . . . . . . . . . . 482
8.2.7. Podzapytania. . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
8.2.8. Porządkowanie wyniku . . . . . . . . . . . . . . . . . . . . . . . 484
8.2.9. Ćwiczenia do podrozdziału 8.2 . . . . . . . . . . . . . . . . . . . 485
8.3. Dodatkowe postacie wyrażeń w języku OQL . . . . . . . . . . 486
8.3.1. Wyrażenia kwantyfikowane . . . . . . . . . . . . . . . . . . . . 486
8.3.2. Wyrażenia agregujące . . . . . . . . . . . . . . . . . . . . . . . 487
8.3.3. Wyrażenia GROUP BY . . . . . . . . . . . . . . . . . . . . . . 488
8.3.4. Klauzula HAVING . . . . . . . . . . . . . . . . . . . . . . . . . 491
8.3.5. Operatory algebry zbiorów . . . . . . . . . . . . . . . . . . . . . 491
8.3.6. Ćwiczenia do podrozdziału 8.3 . . . . . . . . . . . . . . . . . . . 493
8.4. Tworzenie i przypisywanie obiektów w języku OQL . . . . . . 493
8.4.1. Przypisywanie wartości zmiennym języka podstawowego . . . . . . 494
8.4.2. Wydobywanie elementu z kolekcji . . . . . . . . . . . . . . . . . 494
8.4.3. Wydobywanie poszczególnych elementów kolekcji . . . . . . . . . 495
8.4.4. Tworzenie nowych obiektów . . . . . . . . . . . . . . . . . . . . 496
8.4.5. Ćwiczenia do podrozdziału 8.4 . . . . . . . . . . . . . . . . . . . 498
8.5. Obiekty krotkowe w języku SQL3 . . . . . . . . . . . . . . . . 499
8.5.1. Typ wiersza . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
8.5.2. Deklarowanie relacji z typem wiersza. . . . . . . . . . . . . . . . 501
8.5.3. Dostęp do składowych typu wiersza. . . . . . . . . . . . . . . . . 501
8.5.4. Referencje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
8.5.5. Następstwo referencji. . . . . . . . . . . . . . . . . . . . . . . . 504
8.5.6. Zakres referencji . . . . . . . . . . . . . . . . . . . . . . . . . . 505
8.5.7. Identyfikatory obiektów jako wartości . . . . . . . . . . . . . . . 506
8.5.8. Ćwiczenia do podrozdziału 8.5 . . . . . . . . . . . . . . . . . . . 509
8.6. Abstrakcyjne typy danych w języku SQL3 . . . . . . . . . . . 510 8.6.1. Definiowanie abstrakcyjnych typów danych. . . . . . . . . . . . . 510 8.6.2. Definiowanie metod dla typów ADT . . . . . . . . . . . . . . . . 514
18
SPIS TREŚCI
8.6.3. Funkcje zewnętrzne . . . . . . . . . . . . . . . . . . . . . . . . 517 8.6.4. Ćwiczenia do podrozdziału 8.6 . . . . . . . . . . . . . . . . . . . 518
8.7. Porównanie koncepcji systemów ODL/OQL i SQL3 . . . . . . 519 8.8. Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 8.9. Literatura do rozdziału 8 . . . . . . . . . . . . . . . . . . . . . 522 Skorowidz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523