Inhaltsverzeichnis | 6 |
Vorwort | 14 |
Teil I: Einleitung | 16 |
1 Was sind eigentlich Datenbanken? | 18 |
1.1 Konsistenz ist Grundvoraussetzung | 18 |
1.2 Keine Datenbank ohne Datenbankmanagementsystem | 19 |
1.3 Dauerhafte Speicherung | 20 |
1.4 Alle auf einen | 21 |
1.5 Auf Nummer sicher | 22 |
1.6 Damit alles stimmt | 22 |
1.7 Tornadosicher | 24 |
1.8 Der Mensch | 24 |
1.9 Warum nicht selber machen? | 25 |
1.10 Das ANSI SPARC-Modell als Lösung | 28 |
1.11 Wie alles anfing | 31 |
1.12 Mit IMS zum Mond | 32 |
1.13 Und heute? | 33 |
1.14 Wie geht es weiter? | 34 |
2 Relationale Datenbanken – eine kurze Übersicht | 36 |
2.1 Relationen gibt es schon lange | 36 |
2.2 Die zwölf Gebote | 37 |
2.3 Funktioniert das überhaupt? | 38 |
2.4 Wo bekommt man ein RDBMS? | 39 |
2.5 Ein RDBMS zum Anfassen | 39 |
2.6 Erste Schritte mit SQL | 41 |
2.7 Der Systemkatalog | 43 |
2.8 Was kann SQL? | 45 |
3 Das relationale Modell | 48 |
3.1 Mengen | 48 |
3.2 Das kartesische Produkt | 49 |
3.3 Relationen | 51 |
3.4 Die Projektion | 53 |
3.5 Superschlüssel | 54 |
3.6 Schlüsselkandidaten | 56 |
3.7 Relationentyp | 59 |
3.8 Fremdschlüssel | 60 |
3.9 Alles nur graue Theorie? | 63 |
4 Die Relationenalgebra | 66 |
4.1 Die Projektion | 67 |
4.2 Abgeschlossenheit | 69 |
4.3 Produkt, Vereinigung und Differenz | 70 |
4.4 Prädikate | 73 |
4.5 Die einfache Selektion | 76 |
4.6 Der Durchschnitt | 77 |
4.7 Die allgemeine Selektion | 77 |
4.8 Der Join | 79 |
4.9 Wo sind die Grenzen? | 81 |
4.10 Was soll das? | 82 |
4.11 Atomare Werte | 83 |
4.12 Wiederholungsgruppen | 84 |
Teil II: Die Datenbank wird erschaffen | 86 |
5 Tabellen und Constraints | 88 |
5.1 Die Wirklichkeit ist nicht vollkommen | 88 |
5.2 Keine Relationentypen in SQL | 89 |
5.3 Domänen – ein selten besuchtes Gebiet | 90 |
5.4 Der Typ ist wichtig | 90 |
5.5 Die reine Lehre | 91 |
5.6 Dubletten verhindern | 92 |
5.7 Primärschlüssel | 96 |
5.8 Fremdschlüssel | 96 |
5.9 Natürliche Schlüssel | 99 |
5.10 Künstliche Schlüssel leicht gemacht | 102 |
5.11 Statische Regeln | 103 |
5.12 Es muss nicht immer statisch sein | 105 |
5.13 Tabellen mit gleichen Namen | 106 |
5.14 null – die unbekannte Dimension | 108 |
5.15 Änderungen von referenzierten Daten | 115 |
5.16 Datentypen | 117 |
6 Von der Idee zum Konzept | 124 |
6.1 Entitäten und ihre Attribute | 125 |
6.2 Entitätstypen | 128 |
6.3 Beziehungen | 131 |
6.4 Wie viel Entität darf's denn sein? | 133 |
6.5 Rekursive Beziehungen | 136 |
6.6 Hält doppelt gemoppelt besser? | 138 |
6.7 Ist doch ganz einfach? | 140 |
7 Von einem Modell zum nächsten | 142 |
7.1 Mehrwertige Datentypen | 143 |
7.2 Zusammengesetzte Attribute | 144 |
7.3 Aus Entitätstypen werden Tabellen | 144 |
7.4 Beziehungen mit mehr als zwei Teilnehmern | 145 |
7.5 Binäre Beziehungen | 147 |
7.5.1 C-CM-Beziehungen | 148 |
7.5.2 1-CM-Beziehungen | 148 |
7.5.3 1-C-Beziehungen | 149 |
7.5.4 C-C-Beziehungen | 149 |
7.5.5 CM-CM-Beziehungen | 151 |
7.5.6 1-1-Beziehungen | 152 |
7.5.7 Weitere Beziehungstypen | 154 |
7.5.8 Beziehungen mit Attributen | 154 |
8 Normalisierung | 158 |
8.1 Anomalien | 158 |
8.2 Die 1. Normalform | 162 |
8.3 Funktionale Abhängigkeiten | 163 |
8.4 Neuer Wein in alten Schläuchen | 167 |
8.5 Die 2. Normalform | 168 |
8.6 Der Weg in die Normalität | 170 |
8.7 Die 3. Normalform | 174 |
Teil III: Ran an die Daten | 178 |
9 Grundlagen von SQL | 180 |
9.1 Merkmale von SQL | 180 |
9.2 Die Bestandteile von SQL | 182 |
9.3 Der Standard | 184 |
10 Einfache select-Anweisungen | 186 |
10.1 Viele Möglichkeiten, um Spalten zu beschreiben | 187 |
10.2 Datensätze mit where auswählen | 191 |
10.3 Einige nützliche Operatoren | 193 |
10.4 Sortieren | 196 |
10.5 Alles in einen Topf | 197 |
11 Funktionen in SQL-Anweisungen | 202 |
11.1 Funktionen zur Textverarbeitung | 204 |
11.2 Funktionen für Zahlen | 206 |
11.3 Funktionen für Datumsangaben | 208 |
11.4 Aggregatfunktionen | 209 |
12 Daten zusammenfassen | 214 |
12.1 Die group by-Komponente | 214 |
12.2 Die having-Komponente | 217 |
13 Datensätze verbinden | 222 |
13.1 Joins mit SQL | 224 |
13.2 Eine andere Syntax | 227 |
13.3 Outer Joins | 228 |
13.4 Muss es immer natürlich sein? | 229 |
13.5 Joins mit mehr als zwei Tabellen | 230 |
14 Geschachtelte Abfragen | 234 |
14.1 Tabellen ohne Join verbinden | 234 |
14.2 Vorsicht bei Mengen | 236 |
14.3 Weitere Operatoren für Mengen | 237 |
14.3.1 all | 238 |
14.3.2 any | 240 |
14.3.3 exists | 241 |
14.4 Geschachtelte Abfragen oder Joins? | 241 |
14.5 Korrelierte geschachtelte Abfragen | 243 |
15 Views – sehen Sie Ihre Daten mal anders | 246 |
15.1 Was sind Views? | 248 |
15.2 Wozu Views? | 249 |
15.3 Änderungen in Views | 251 |
15.4 Codds 6. Regel | 253 |
16 Machen Sie Ihre Datenbanken sicher! | 256 |
16.1 Benutzerverwaltung | 257 |
16.2 Welche Rechte gibt es? | 259 |
16.3 Rechte auf Views | 260 |
16.4 Weitergabe von Rechten | 261 |
16.5 Verkettungen von Rechten | 262 |
Teil IV: Anwendungsentwicklung | 264 |
17 Transaktionen | 266 |
17.1 Was schiefgehen kann, geht schief | 266 |
17.2 Ein Experiment | 268 |
17.3 Anweisungen gruppieren | 269 |
17.4 Das Transaktionsprotokoll | 271 |
17.5 Auch nach außen eine Einheit | 272 |
17.6 ACID – Transaktionen kurz und bündig | 274 |
18 JDBC | 276 |
18.1 Der Cursor – die Verbindung zweier Welten | 276 |
18.2 Wie bringe ich meiner Programmiersprache SQL bei? | 279 |
18.3 Einige Vorarbeiten | 280 |
18.4 Gute Verbindungen sind alles | 281 |
18.5 Aus der Datenbank in das Programm | 283 |
18.6 Ohne Transaktionen würde etwas fehlen | 286 |
18.7 Flottes SQL dank guter Vorbereitung | 287 |
18.8 Kurz vor Schluss | 290 |
19 Hibernate | 294 |
19.1 Was ist O/R-Mapping? | 294 |
19.2 Aufbau einer Entwicklungsumgebung | 296 |
19.3 Die Konfiguration | 298 |
19.4 Ein einfaches Mapping | 300 |
19.5 Daten einfügen und ändern | 304 |
19.6 Daten lesen | 306 |
19.7 Komplexe Attribute | 307 |
19.8 Kein Allheilmittel | 309 |
20 Unter der Haube | 312 |
20.1 Alles kann so einfach sein | 312 |
20.2 Die Festplatte | 313 |
20.3 Caching | 316 |
20.4 Wenn's mal kracht | 317 |
20.5 Das Transaktionsprotokoll | 319 |
20.6 Der Optimierer | 321 |
20.7 Der Index | 325 |
20.8 B+-Bäume | 328 |
20.8.1 Idee | 328 |
20.8.2 Beispiel | 330 |
20.8.3 Regeln | 330 |
20.8.4 Suchen | 332 |
20.8.5 Einfügen | 333 |
20.8.6 Löschen | 334 |
20.8.7 Wie schnell ist das? | 335 |
20.9 Indizierung mit SQL | 336 |
Teil V: Es muss nicht immer relational sein | 340 |
21 Objektdatenbanken | 342 |
21.1 Das Manifest | 342 |
21.2 db4o | 344 |
21.2.1 db4o kann so einfach sein | 345 |
21.2.2 Query By Example | 346 |
21.2.3 Native Abfragen | 348 |
21.3 Warum nicht gleich objektorientiert? | 350 |
22 XML-Datenbanken | 352 |
22.1 Eine ganz einfache Syntax | 353 |
22.2 Selbstdefinierte Regeln | 355 |
22.3 XML und relationale Datenbanken | 358 |
22.3.1 Datenzentriertes XML | 358 |
22.3.2 Dokumentenzentriertes XML | 360 |
22.4 XPath – eine Abfragesprache für XML | 362 |
22.5 XQuery – fast wie zu Hause | 366 |
22.6 Der hybride Ansatz | 370 |
23 NoSQL | 374 |
23.1 Das Kreuz mit dem Schema | 374 |
23.2 Gewaltige Datenmengen | 375 |
23.3 Nicht immer das Gleiche | 376 |
23.4 Schemafreie Datenbanken mit MongoDB | 376 |
23.5 Gruppieren und Aggregieren mit MapReduce | 379 |
23.6 Sharding mit MongoDB | 380 |
23.7 Drum prüfe, wer sich bindet | 384 |
Literaturverzeichnis | 386 |
Stichwortverzeichnis | 390 |