Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
1 Materialien zum Buch
23
1 Einführung
25
1.1 Für wen ist dieses Buch geschrieben?
25
1.2 Aufbau des Buches
26
1.2.1 Teil I – Einführung und Grundlagen
26
1.2.2 Teil II – Die SELECT-Anweisung
27
1.2.3 Teil III – Datenmanipulation und Erzeugung von Datenbankobjekten
29
1.2.4 Teil IV – Spezielle Abfragetechniken
30
1.2.5 Teil V – Datenbankmodellierung
33
1.3 Anmerkung zur vierten Auflage
35
1.4 Anmerkung zur dritten Auflage
36
1.5 Anmerkung zur zweiten Auflage
37
1.6 Danksagung
38
TEIL I Einführung und Grundlagen
39
2 Verwendete Werkzeuge und Skripte
41
2.1 Aufsetzen einer Beispieldatenbank
41
2.1.1 Warum Sie eine Datenbank zum Testen haben sollten
41
2.1.2 Eine Datenbank herunterladen und installieren
42
2.2 SQL Developer
44
2.2.1 SQL Developer herunterladen und installieren
44
2.2.2 Übersicht SQL Developer
44
2.2.3 Eine Datenbankverbindung aufbauen
44
2.2.4 Installation des Benutzers SQL_BUCH
47
2.2.5 Installation des Benutzers SH
48
2.3 Die Datenbankbenutzer
49
2.3.1 SYS und SYSTEM
49
2.3.2 SQL_BUCH/SH
50
2.4 Online-Dokumentation und weiterführende Literatur
50
3 Konzept einer relationalen Datenbank
53
3.1 Die Idee der relationalen Speicherung
53
3.1.1 Aufteilung der Daten auf Tabellen
55
3.1.2 Die Spielregeln relationaler Datenbanken
56
3.1.3 Die 1:n-Beziehung und ihre Varianten
62
3.1.4 Die m:n-Beziehung
63
3.1.5 Zusammenfassung
68
3.2 SQL – die »Lingua franca« der Datenbank
70
3.2.1 Was ist SQL?
71
3.2.2 Von Daten und Informationen
72
3.2.3 Wozu wird SQL in der Datenbank verwendet?
74
3.2.4 Kurzübersicht: Die Standards und was davon zu halten ist
76
3.3 Analyse vorhandener Datenmodelle
78
3.3.1 Warum es nicht »das« Datenmodell gibt
78
3.3.2 Beispielanalyse: Der Benutzer SQL_BUCH
79
3.3.3 Ausblick
83
TEIL II Die SELECT-Anweisung
85
4 Grundlagen: Auswahl und Projektion
87
4.1 Projektion
87
4.1.1 Spalten einschränken
88
4.1.2 Mit Spaltenwerten rechnen
91
4.1.3 Mit alphanumerischen Spalten arbeiten
93
4.1.4 Die Tabelle DUAL
96
4.1.5 Spalten- und Tabellenalias
98
4.2 Auswahl
102
4.2.1 Zeilen auswählen mit der WHERE-Klausel
103
4.2.2 Boolesche Operatoren
105
4.2.3 Einschränkungen mit LIKE, IN und BETWEEN
107
4.2.4 Duplikate filtern mit DISTINCT
114
4.3 Sortieren von Zeilenmengen
116
4.3.1 ORDER BY
117
4.3.2 ASC/DESC
118
4.3.3 NULLS FIRST und NULLS LAST
119
4.3.4 Einfluss der Sortierung auf die Datenbankleistung
120
4.4 Fallunterscheidungen
120
4.4.1 CASE-Anweisung
121
4.4.2 DECODE-Funktion
125
4.5 Die Klausel ROW LIMITING
128
4.6 Pseudospalten
131
4.6.1 ROWNUM
131
4.6.2 Sequenzwerte
133
4.6.3 ROWID
134
4.6.4 ORA_ROWSCN
135
4.6.5 Weitere Pseudospalten
136
4.7 Kommentare
137
4.7.1 Einzeiliger Kommentar
137
4.7.2 Mehrzeiliger Kommentar
137
4.7.3 Einige Anmerkungen zu Kommentaren
138
4.8 Der NULL-Wert
139
4.8.1 Was ist ein NULL-Wert bei Oracle?
139
4.8.2 Ein bisschen Quälerei mit NULL-Werten
141
4.8.3 Der NULL-Wert bei booleschen Operatoren
142
4.9 Übungen
146
5 Daten aus mehreren Tabellen lesen: Joins
147
5.1 Einführung in Joins
148
5.2 Inner Join
149
5.2.1 Equi-Join
150
5.2.2 Reihenfolge der Tabellen
156
5.2.3 Non-Equi-Join
157
5.2.4 Oracle-proprietäre Schreibweise
158
5.2.5 Joins versus Datenbank-Constraints
159
5.3 Outer Join
160
5.3.1 Left und Right Outer Join
161
5.3.2 Oracle-proprietäre Schreibweise
165
5.3.3 Full Join
166
5.3.4 Oracle-proprietäre Schreibweise
168
5.3.5 Cross-Join
168
5.3.6 Oracle-proprietäre Schreibweise
169
5.4 Anti-Join, Semi-Join, Self-Join und Natural Join
169
5.4.1 Anti-Join
170
5.4.2 Semi-Join
170
5.4.3 Self-Join
172
5.4.4 Natural Join
173
5.5 Mengenoperationen mit UNION, MINUS und INTERSECT
175
5.5.1 UNION und UNION ALL
175
5.5.2 MINUS
177
5.5.3 INTERSECT
179
5.5.4 VALUES-Tabellenfunktion
180
5.5.5 Besonderheiten und Einsatzbeispiele
181
5.6 Übungen
182
5.7 Zusatz: Weiterführende Join-Konzepte
183
5.7.1 Datenverdichtung mit partitionierten Joins
183
5.7.2 CROSS APPLY, OUTER APPLY und LATERAL
188
6 Zeilenfunktionen
191
6.1 Grundsätzliches zu Funktionen
191
6.1.1 Funktionstypen
192
6.1.2 Funktionsparameter
192
6.1.3 Die verschiedenen Arten von Zeilenfunktionen
194
6.2 Zeichenfunktionen
195
6.2.1 Funktionen zur Textsuche und -auswertung
195
6.2.2 Funktionen zur Textmanipulation
198
6.2.3 Reguläre Ausdrücke
205
6.2.4 Erzeugungs- und Konvertierungsfunktionen
215
6.2.5 Mister Q
216
6.2.6 Übungen
218
6.3 Datumsfunktionen
219
6.3.1 Ein Datum erzeugen
222
6.3.2 Erzeugung eines Intervalls
231
6.3.3 Rundungsfunktionen
232
6.3.4 Datumsarithmetik
234
6.3.5 Datumsfunktionen
236
6.3.6 Übungen
239
6.4 Mathematische Funktionen
239
6.4.1 Übersicht über die mathematischen Funktionen
240
6.4.2 Konvertierungsfunktionen und Zahlenformate
249
6.4.3 Spezielle mathematische Funktionen
253
6.4.4 Übungen
255
6.5 Allgemeine Funktionen
255
6.5.1 Vergleichsfunktionen GREATEST und LEAST
255
6.5.2 COLLATE-Operator zur Kontrolle des Sortier- und Vergleichsverhaltens
256
6.5.3 Arbeiten mit dem NULL-Wert
260
6.5.4 Konvertierungsfunktionen
264
6.5.5 Funktionen für Spezialfelder von Oracle
269
6.5.6 Hashcodes erstellen
272
6.5.7 Übungen
274
6.6 Eigene Funktionen erstellen: Berechnung der Fakultät
274
6.6.1 Anforderungen und Test
274
6.6.2 Implementierung in PL/SQL
275
7 Gruppenfunktionen
279
7.1 Die Standardgruppenfunktionen
280
7.1.1 AVG, MAX, MIN, SUM und COUNT
280
7.1.2 MEDIAN, VARIANCE und STDDEV
281
7.1.3 Gruppenfunktionen und NULL-Werte
282
7.1.4 Gruppenfunktion und die DISTINCT-/UNIQUE-Klausel
284
7.2 Gruppierung von Gruppenfunktionen
285
7.2.1 Die Klausel GROUP BY
285
7.2.2 Der NULL-Wert und die Gruppierung
287
7.2.3 Gruppieren nach mehreren Kriterien
287
7.2.4 Wozu dient die Gruppierung?
291
7.2.5 Filtern der Gruppenergebnisse durch HAVING
292
7.2.6 Erweiterte Konzepte der Gruppierung: ROLLUP und CUBE
293
7.2.7 Geschachtelte Gruppenfunktionen
299
7.3 Spezielle Gruppenfunktionen
300
7.3.1 DENSE_RANK und RANK
300
7.3.2 FIRST und LAST
303
7.3.3 LISTAGG
305
7.4 Wenn ungefähr ausreicht
308
7.5 Übungen
309
8 Unterabfragen
311
8.1 Die Unterabfrage in der WHERE-Klausel
311
8.1.1 Unterabfragen, die einen Wert zurückliefern: Skalare Unterabfrage
312
8.1.2 Harmonisierte Unterabfrage
313
8.1.3 Unterabfragen mit mehreren Zeilen
316
8.1.4 Unterabfragen mit mehreren Spalten
319
8.2 Die Unterabfrage in der FROM-Klausel (Inner View)
322
8.2.1 Beispiel
322
8.2.2 Vergleich zur harmonisierten Unterabfrage
324
8.2.3 Die WITH-Klausel
327
8.3 Unterabfragen und Joins
329
8.3.1 Anti-Joins
329
8.3.2 Semi-Joins mit der EXISTS-Klausel
331
8.4 Funktionen in der WITH-Klausel
334
8.5 Übungen
336
9 Analytische Funktionen
337
9.1 Die Idee der analytischen Funktionen
337
9.1.1 Allgemeine Syntax
338
9.1.2 Einsatzbereiche
343
9.2 Gruppenfunktionen als analytische Funktionen
343
9.2.1 Einfache Beispiele
343
9.2.2 Die WINDOW-Klausel
348
9.2.3 RATIO_TO_REPORT
353
9.3 Analytische Rangfunktionen
354
9.3.1 RANK, DENSE_RANK und PERCENT_RANK
354
9.3.2 LAG und LEAD
364
9.4 Zusammenfassung
370
9.5 Übungen
371
TEIL III Datenmanipulation und Erzeugung von Datenbankobjekten
373
10 Datenmanipulation
375
10.1 Die INSERT-Anweisung
376
10.1.1 Allgemeine Syntax
376
10.2 Die UPDATE-Anweisung
382
10.2.1 Allgemeine Syntax
382
10.2.2 Variationen zum Thema
384
10.3 Die DELETE-Anweisung
389
10.4 Die MERGE-Anweisung
390
10.4.1 Allgemeine Syntax
391
10.4.2 Variationen zum Thema
395
10.5 Exkurs: Flashback
401
10.6 Sequenzen und Trigger
403
10.6.1 Sequenzen
403
10.6.2 Datenbank-Trigger
407
10.7 Ihr Sicherheitsnetz – die Transaktion
409
10.7.1 Was ist eine Transaktion?
409
10.8 Fehlerbehandlung während der Datenmanipulation
412
10.8.1 Die Klausel LOG ERRORS
412
10.8.2 Vorbereitung zum Einsatz
414
10.8.3 Verwendung der Klausel LOG ERRORS
416
10.8.4 Darstellung der Fehler
418
10.8.5 Einsatzszenarien
419
10.9 Multi-Table-Insert
420
10.9.1 Kopieren von Daten in mehrere Zieltabellen
420
10.9.2 Fallweises Einfügen in jeweils eine Zieltabelle
421
10.9.3 Workshop: Schemamigration mittels Multi-Table-Insert
424
11 Views erstellen
429
11.1 »Normale« Views
429
11.1.1 Was genau ist eine View?
430
11.1.2 Wie werden Views erstellt?
432
11.1.3 Einfache und komplexe Views
438
11.1.4 Fortgeschrittene Views
440
11.2 Einsatzbereiche von Views
440
11.2.1 Kapselung von Logik
441
11.2.2 Zugriffsschutz
443
11.2.3 Programmieren nach dem Gelbe-Seiten-Prinzip
444
11.2.4 Lösung komplexer Probleme in Teilschritten
444
11.3 Wer sollte Views verwenden?
445
11.4 Materialized View
447
11.4.1 Was ist eine Materialized View?
447
11.4.2 Erstellung von materialisierten Views
448
11.4.3 Grenzen der Aktualisierung
461
12 Tabellen erstellen
463
12.1 Einfache Tabellen erstellen
463
12.1.1 Allgemeine Syntax
465
12.1.2 Virtuelle Spalten
470
12.1.3 Standardwerte für Spalten
473
12.1.4 Identity Column (Autowertspalte)
474
12.1.5 Reservierbare Spalten
477
12.1.6 COLLATE-Optionen bei der Tabellenanlage
478
12.2 Datentypen
480
12.2.1 Texttypen
480
12.2.2 Datumstypen
484
12.2.3 Zahlentypen
487
12.2.4 Boolean
489
12.2.5 Große Objekte
490
12.2.6 Sonstige Datentypen
492
12.2.7 Mitgelieferte Objekttypen
493
12.3 Domänen
493
12.3.1 Einzelspaltendomäne
494
12.3.2 Mehrspaltendomäne
496
12.3.3 Flexible Domäne
498
12.3.4 Aufzählungsdomäne
500
12.3.5 Domänenfunktionen
503
12.3.6 Bewertung
504
12.4 Annotationen und Kommentare
504
12.4.1 Kommentare
504
12.4.2 Annotationen
505
12.5 Weitere Tabellentypen
507
12.5.1 Indexorganisierte Tabelle
507
12.5.2 Temporäre Tabelle
508
12.5.3 Externe Tabelle
510
12.5.4 Partitionierte Tabelle
515
12.5.5 Blockchain und Immutable-Tabelle
517
12.6 Erweiterung zur »aktiven Tabelle«
520
12.6.1 Die Idee der »aktiven Tabelle«
521
12.6.2 Zur Illustration: Beispiel eines Triggers
522
12.6.3 Bewertung dieses Verfahrens
524
13 Indizes erstellen
527
13.1 Was ist ein Index?
528
13.1.1 Einige Überlegungen zur Indizierung
529
13.2 Indextypen bei Oracle
532
13.2.1 B*-Baum-Index
532
13.2.2 Funktionsbasierter Index
533
13.2.3 Bitmap-Index
537
13.3 Spezielle Indextypen
537
13.3.1 Volltextindizierung
537
14 Aufbau einer Oracle-Datenbank
553
14.1 Wie arbeitet eine Oracle-Datenbank?
553
14.1.1 Eine SQL-Anweisung wird ausgeführt
553
14.1.2 Änderung von Daten, Transaktion
557
14.1.3 Daten- und Lesekonsistenz
560
14.2 Datensicherheit
564
14.2.1 Datenbankbenutzer versus Schema
565
14.2.2 Erstellung eines Datenbankbenutzers
568
14.2.3 Allgemeine Syntax
568
14.2.4 Systemprivilegien
572
14.2.5 Objektprivilegien
574
14.2.6 Rollen
577
14.2.7 Passwort- und Ressourcenrechte
578
14.3 Zeichensatzcodierung
579
14.3.1 Single-Byte-Codierungen
579
14.3.2 Multi-Byte-Codierungen
581
14.3.3 Kompatibilitätsprobleme
583
15 Anwendungsbeispiele
585
15.1 Delta-View
585
15.1.1 Szenario
586
15.1.2 Bespieldaten
586
15.1.3 Lösungsansatz
588
15.1.4 Bewertung
593
15.1.5 Und was ist mit MERGE?
594
15.2 Dubletten bereinigen
596
15.2.1 Teilproblem: Dublette erkennen
597
15.2.2 Doppelte Einträge ignorieren
598
15.2.3 Doppelte Daten aus einer Tabelle entfernen
599
15.2.4 Die guten ins Töpfchen, die schlechten ins Kröpfchen
600
15.3 Entscheidungstabellen
601
15.3.1 Szenario
601
15.3.2 Lösungsansatz
603
15.3.3 Bewertung
607
15.4 Entscheidungstabelle 2: »Expertensystem«
608
TEIL IV Spezielle Abfragetechniken
613
16 Umgang mit Datum und Zeit
615
16.1 Erzeugung von Datumstypen
615
16.1.1 Arbeiten mit Zeitzoneninformationen
616
16.1.2 Nähere Angaben zu Zeitzonen
619
16.1.3 Zeitzonenangaben in Literalen
621
16.2 Erzeugung von Intervallen
622
16.2.1 Allgemeinere Einführung in die Syntax
622
16.2.2 Intervalle über lange Zeiträume erstellen
623
16.2.3 Intervalle aus Zahlen ermitteln
623
16.2.4 Datumsarithmetik mit Intervallen
624
16.3 Konvertierung von Zeichenketten in Datumstypen
626
16.3.1 Optionaler Parameter NLS_PARAM
626
16.3.2 Die Formatmasken
627
16.4 Zeilenfunktionen für Zeitstempel mit Zeitzonen
632
16.4.1 DBTIMEZONE, SESSIONTIMEZONE
632
16.4.2 FROM_TZ
632
16.4.3 NEW_TIME
632
16.4.4 SYS_EXTRACT_UTC
634
16.4.5 TZ_OFFSET
634
16.4.6 ORA_DST_*
635
16.5 Abfragen über die Zeit: Flashback
635
16.5.1 Verwendung von Flashback auf Tabellenebene
637
16.5.2 Zusammenfassung
640
17 Hierarchische Abfragen
641
17.1 Das Problem
641
17.2 Lösung mit der CONNECT BY-Klausel
644
17.2.1 Die Pseudospalte LEVEL
648
17.2.2 Sortierung mit ORDER SIBLINGS BY
649
17.3 Erweiterungen der CONNECT BY-Klausel
651
17.3.1 Weitere Pseudospalten
651
17.3.2 Operator CONNECT_BY_ROOT
653
17.3.3 Die Funktion SYS_CONNECT_BY_PATH
654
17.3.4 Ein etwas komplexeres Anwendungsbeispiel
656
17.3.5 Ein weiteres Beispiel
661
17.4 Hierarchische Abfragen nach ISO-Standard
662
17.4.1 Grundform
663
17.4.2 Erweiterungen
666
17.4.3 Anwendungsbeispiel reloaded: Kritischer Pfad
672
18 Arbeiten mit XML
675
18.1 XML-Instanzen mit SQL/XML erzeugen
678
18.1.1 Erstellen von XML mittels SQL/XML-Funktionen
679
18.1.2 Übersicht über weitere SQL/XML-Funktionen
686
18.1.3 Erstellung von XML-Instanzen mit XQUERY-Funktion XMLQuery
690
18.2 Bearbeitung von XML-Instanzen in SQL/XML
696
18.2.1 Vorbereitung von Testdaten
696
18.2.2 Aktualisierung von XML-Daten
697
18.2.3 Funktion XMLEXISTS
701
18.2.4 Die Funktion XMLCAST
702
18.3 Extraktion relationaler Daten aus XML
702
18.3.1 Funktion XMLTABLE
703
18.4 Speicherung von XML in der Datenbank
707
18.4.1 Wann wird XML in der Datenbank gespeichert?
707
18.4.2 Speicherformen von XML in der Datenbank
710
18.4.3 Registrieren eines XML-Schemas
711
18.4.4 Indizierung von XML-Instanzen
716
18.5 Der Datentyp XMLTYPE
716
18.5.1 Verwendung von XMLTYPE als Tabellen- oder Spaltentyp
717
18.5.2 XMLTYPE-Methoden
718
18.5.3 Umformung von XML mittels XSLT
719
18.5.4 Lesen und Schreiben von XMLTYPE in das Dateisystem
723
19 JSON
725
19.1 Übersicht über JSON
725
19.2 Oracles JSON-Unterstützung
728
19.3 Abfragen gegen JSON-Instanzen
731
19.3.1 Punktnotation (Simplified Syntax for JSON)
731
19.3.2 SQL/JSON-Pfadnotation
733
19.3.3 Entspannung
735
19.4 JSON-Funktionen und -Operatoren
736
19.4.1 IS JSON bzw. IS NOT JSON
736
19.4.2 Funktion JSON_VALUE
736
19.4.3 Funktion JSON_QUERY
739
19.4.4 Operator JSON_EXISTS
740
19.4.5 Operator JSON_TEXTCONTAINS
741
19.5 Erzeugung von JSON aus relationalen Daten
742
19.5.1 Funktion JSON_OBJECT
742
19.5.2 Funktion JSON_ARRAY
746
19.5.3 Funktion JSON_OBJECTAGG
748
19.5.4 Funktion JSON_ARRAYAGG
750
19.6 Relationale Daten aus JSON extrahieren
752
19.6.1 Funktion JSON_TABLE
752
19.6.2 Funktion JSON_SERIALIZE
755
19.6.3 Kapselung und Beschleunigung über Views
756
19.7 JSON-Instanzen bearbeiten
758
19.7.1 Funktion JSON_TRANSFORM
758
19.7.2 Funktion JSON_MERGEPATCH
762
19.8 JSON Data Guide
764
19.9 JSON-Schema
767
19.9.1 Daten mit JSON-Schema validieren
767
19.9.2 JSON-Schema generieren
770
19.10 JSON Duality Views
770
19.10.1 Erstellung einer JSON Duality View
771
19.10.2 Datenmanipulation einer JSON Duality View
772
19.10.3 Optimistisches Locking
774
19.10.4 Eine alternative Syntax: GraphQL
775
20 Pivotieren von Daten
777
20.1 Pivotierung mit Gruppenfunktionen
778
20.2 Pivotierung mit der PIVOT-Klausel
780
20.2.1 Die Klausel FOR IN
781
20.2.2 Die XML-Klausel
784
20.3 Unpivotierung mit Gruppenfunktionen
787
20.4 Unpivotierung mit der UNPIVOT-Klausel
790
21 Row Pattern Matching
793
21.1 Die Grundlagen
793
21.2 Syntaktische Grundlagen
795
21.3 Erweiterungen zur Grundsyntax
801
21.3.1 Implementierung der regulären Ausdrücke
802
21.3.2 Die Klausel AFTER MATCH SKIP
802
21.3.3 Die Klauseln ONE ROW und ALL ROWS PER MATCH
806
21.3.4 Subsets
808
21.4 Weitere Beispiele und Optionen
809
21.4.1 Fotodokumentation bei Dekubitus-Patienten
810
21.4.2 Freie Plätze bei Borussia
815
21.5 Zusammenfassung
817
22 Die MODEL-Klausel
819
22.1 Lösung des Problems mit der MODEL-Klausel
822
22.2 Partitionierung, Dimension und Messung
825
22.2.1 Partitionierung mit PARTITION BY
826
22.2.2 Dimensionierung mit DIMENSION BY
827
22.2.3 Messung mit MEASURES
827
22.3 Regeln
828
22.3.1 UPSERT versus UPSERT ALL versus UPDATE
828
22.3.2 Referenzen auf Zellen
829
22.3.3 Positionale und symbolische Referenz
830
22.3.4 NULL-Werte versus fehlende Zellen
831
22.3.5 Funktionen und Klauseln für die MODEL-Klausel
833
22.3.6 Sortierung von Regeln und Zellen
836
22.4 Weiterführende Konzepte
838
22.4.1 Iterationen
839
22.4.2 Referenzen
841
22.4.3 Verwendung in komplexen Fallunterscheidungen
845
22.5 Bewertung der MODEL-Klausel
846
23 SQL Property Graphen
849
23.1 Einführung in Graphen
849
23.2 Erstellen von Property-Graphen
851
23.2.1 Vertex-Tabellen
852
23.2.2 Edge-Tabellen
853
23.2.3 Labels und Properties
854
23.3 SQL/PGQ
857
23.3.1 Einfache Abfragen
857
23.3.2 Die Funktionen VERTEX_ID und EDGE_ID
859
23.3.3 Weiterführende Abfragekonzepte
860
23.4 Beurteilung
863
24 Objektorientierung in der Oracle-Datenbank
865
24.1 Einführung in die Objektorientierung
866
24.1.1 Alles ist ein Objekt
866
24.1.2 Das zweite Reizwort: Vererbung!
868
24.1.3 Abstrakte und finale Klassen
869
24.1.4 Objektidentität versus Statement of Truth
870
24.1.5 Klassen haben komplexe Strukturen
872
24.2 SQL-Typen
873
24.2.1 TYPE
873
24.2.2 VARRAY
880
24.2.3 NESTED TABLE
882
24.3 Multiset-Operatoren und -Bedingungen
887
24.3.1 Multiset-Operatoren
887
24.3.2 Multiset-Bedingungen
888
24.4 Objektorientierte Tabellen
890
24.4.1 Anlage einer Tabelle, basierend auf einem Objekt
890
24.4.2 Eigenheiten der Speicherung von NESTED TABLE
893
24.4.3 Objektreferenzen
896
24.4.4 Objekttabellen als Speichermechanismus
898
24.5 Beurteilung
902
25 Performanzoptimierung von SQL
905
25.1 Sagen Sie der Datenbank, was Sie wollen!
905
25.2 Nutzen Sie alle verfügbaren Optionen von SQL
909
25.3 Vermeiden Sie Umgebungswechsel
913
25.3.1 Funktionsaufrufe aus SQL
913
25.3.2 Zeilen-Trigger
919
25.3.3 Verdeckte Umgebungswechsel
921
25.4 Die Verwendung von Indizes
921
25.4.1 Mythen über Indizes
921
25.4.2 Indizes auf Fremdschlüsselspalten
924
25.4.3 Indizes über mehrere Spalten
928
25.4.4 Bitmap-Join-Index
929
Datenbankmodellierung
933
26 Die Grundlagen der Datenmodellierung
935
26.1 Normalisierung
935
26.2 Tabellendesign
939
26.2.1 Tabellen für verschiedene Einsatzbereiche
939
26.2.2 Spalten, die in vielen Tabellen verwendet werden
941
26.3 Primärschlüssel
942
26.3.1 Primärschlüssel versus Geschäftsinformation?
943
26.3.2 Primärschlüssel im Umfeld von m:n-Verbindungen
944
26.3.3 Müssen Primärschlüssel Zahlen sein?
945
26.4 Fremdschlüssel
946
26.5 Überlegungen zu Datentypen und zur Namenskonvention in Tabellen
947
26.5.1 Überlegungen zu Datentypen
947
26.5.2 Überlegungen zu Namenskonventionen
952
26.6 Zusammenfassung
955
27 Datenmodellierung von Datum und Zeit
959
27.1 Datumsbereiche
959
27.1.1 Speicherung von Datumsbereichen mit zwei Zeitpunkten
959
27.1.2 Speicherung von Datumsintervallen mit WMSYS.WM_PERIOD
966
27.1.3 Prüfung auf überlappende Datenbereiche
969
27.1.4 Andere Datenmodelle zur Speicherung von Datumsbereichen
971
27.2 Analyse gegen eine Zeitdimension
975
27.3 Historisierung und Logging
979
27.3.1 Logging von Stammdatenänderungen
981
27.3.2 Historisierende Datenmodelle
986
27.3.3 Bitemporale Datenmodelle
988
27.3.4 Temporal Validity
990
28 Speicherung hierarchischer Daten
995
28.1 Hierarchie mittels zusätzlicher Hierarchietabelle
995
28.2 Closure Table
999
28.3 Weitere Modelle
1003
28.4 Zusammenfassung
1004
29 Datenwarenhaus
1007
29.1 Star-Schema und Indizierung
1010
29.2 Dimensionen
1013
29.2.1 Die Dimension PRODUCTS
1014
29.2.2 Das Datenbankobjekt DIMENSION
1015
29.2.3 Slowly Changing Dimensions
1016
29.3 Arbeiten mit dem Star-Schema
1017
29.3.1 Analyse des Star-Schemas mit SQL
1017
29.3.2 Anwendungsbeispiel
1018
29.3.3 Speicherung als multidimensionaler Würfel
1021
29.4 Analytische Views
1022
29.4.1 Attribute-Dimension und Hierarchien
1023
29.4.2 Analytische View
1029
29.5 Zusammenfassung
1035
30 Abbildung objektorientierter Strukturen
1037
30.1 Vererbung
1038
30.1.1 Allgemeine Probleme
1039
30.1.2 Table per Class
1041
30.1.3 Table per Concrete Class
1042
30.1.4 Table per Class Family
1042
30.2 Kollektionen
1043
30.3 Alternative Lösungsansätze
1044
30.4 Zusammenfassung
1046
31 Internationalisierung
1049
31.1 Oracle im multilingualen Kontext
1049
31.1.1 Was ist das Problem?
1050
31.1.2 Zeichensatzcodierungen
1051
31.1.3 Datumsformate
1053
31.1.4 Sortierung
1056
31.1.5 National Language Support (NLS)
1056
31.2 Datenmodelle zur Übersetzung von Stammdaten
1057
31.2.1 Sprachtabelle
1058
31.2.2 Übersetzung mit einer Übersetzungstabelle
1061
31.2.3 Übersetzung mit einer zentralen Übersetzungstabelle
1062
31.2.4 Entity-Attribute-Value-Tabellen
1063
31.2.5 Übersetzung in einer Tabelle, reloaded
1064
31.2.6 Übersetzung in einer Tabelle, noch einmal reloaded
1068
Index
1073