Skip to main content

2024 | Buch

Grundkurs Datenbankentwicklung

Von der Anforderungsanalyse zur komplexen Datenbankanfrage

insite
SUCHEN

Über dieses Buch

Mit diesem Buch erhalten Studierende einen kompakten und praxisorientierten Einstieg, mit dem sie bereits früh im Studium sehr gut zurechtkommen. Die verschiedenen Phasen einer Datenbankentwicklung werden mit ihren Vorgehensweisen, Konzepten und möglichen Problemquellen vorgestellt. Gerade die Anforderungsanalyse und die Möglichkeit zur Erstellung mächtiger SQL-Anfragen werden als besonders praxisrelevante Aspekte betont. Durch die im zweiten Teil detailliert vorgestellte Integration von Datenbanken in die umgebende Software sind Studierende nach der Lektüre in der Lage, in Praxisprojekten erfolgreich mitzuarbeiten. Das Buch deckt inhaltlich eine Einführungsvorlesung vollständig ab.

Die 5. Auflage wurde um das Thema JPA (Objekt-Relationale-Persistenz), Trigger in Java ergänzt. Zusätzlich werden Unterschiede zwischen Oracle, Maria DB, SQLite und Apache Derby erläutert.

Neben vielen kleinen Beispielen zur Verdeutlichung einzelner Aspekte wird ein durchgehendes Beispiel genutzt. Alle Kapitel schließen mit Wiederholungsfragen und Übungsaufgaben, deren Lösungen online zum Download zur Verfügung stehen.

Inhaltsverzeichnis

Frontmatter
Kapitel 1. Warum Datenbanken?
Zusammenfassung
Bevor Sie anfangen, ein längeres Buch zu einem fachlichen Thema zu lesen, sollten Sie sicher sein, dass es sinnvoll ist, sich mit diesem Thema zu beschäftigen. In diesem Kapitel wird kurz beschrieben, warum es zur Entwicklung des Themas Datenbanksysteme als eigenständigem Bereich in der Informatik kam. Im nächsten Schritt wird dann allgemein die Funktionalität erläutert, die man von einem solchen System erwarten kann. Die in die Erläuterungen einfließenden Beispiele werden im Buch in den einzelnen Kapiteln wieder aufgenommen und dort weiter im Detail betrachtet.
Stephan Kleuker
Kapitel 2. Anforderungsanalyse für Datenbanken
Zusammenfassung
Die Formulierung präziser Anforderungen ist entscheidend für den Erfolg eines Datenbank-Projektes. In diesem Kapitel lernen Sie, wie die Anforderungsanalyse als Teil eines Software-Entwicklungsprojekts sinnvoll durchgeführt und wie die Ergebnisse kompakt in einem Modell erfasst werden können.
Maßgeblich für den Erfolg von Software-Projekten ist, dass das resultierende Produkt vom Kunden bzw. späteren Nutzern akzeptiert wird. Dies beinhaltet neben der funktionalen Korrektheit, d. h. die Software stürzt nicht ab und hat auch sonst keine Fehler, die Nutzbarkeit der Software. Die Nutzbarkeit hängt dabei nicht nur von der Oberfläche sondern hauptsächlich davon ab, ob die Software die Arbeit, für die sie entwickelt wurde, erleichtert. Müssen für Eingaben sehr viele Eingabemasken verwandt werden, die nicht leicht zu finden sind und in denen man Standardwerte immer wieder erneut von Hand eintragen muss, ist eine Software wenig nützlich. Können z. B. einige Detailinformationen zu eingekauften Artikeln in einem Versandhaus nicht eingetragen werden, ist der Nutzen der Software stark reduziert.
Stephan Kleuker
Kapitel 3. Systematische Ableitung von Tabellenstrukturen
Zusammenfassung
Relationale Datenbanken bauen zentral auf Tabellen auf. In diesem Kapitel lernen Sie, wie man Entity-Relationship-Modelle systematisch in Tabellen übersetzen kann. Mit der Erstellung eines Entity-Relationship-Modells, wie sie im vorherigen Kapitel beschrieben wurde, ist ein wesentlicher Schritt zur Entwicklung einer hochwertigen Datenbank gemeistert. Die Folgeschritte sind einfacher, da man sie, im Gegensatz zum stark kreativen Vorgehen bei der Gewinnung von Nutzeranforderungen, klar formulieren kann. Das Modell wird schrittweise in Tabellen überführt. Dazu gibt es ein formales Verfahren, das genau beschreibt, welche Übersetzungsschritte zu machen sind. Zunächst wird der Begriff der Tabelle präzisiert, um dann die Übersetzung vorzustellen. Vor der Fallstudie werden einige interessante Randfälle der Übersetzung diskutiert.
Stephan Kleuker
Kapitel 4. Normalisierung
Zusammenfassung
Schlecht aufgebaute Tabellen können den Einsatz und die Weiterentwicklung einer Datenbank wesentlich erschweren. In diesem Kapitel lernen Sie Qualitätskriterien für Tabellen kennen, wie diese überprüft werden und welche Reparaturmöglichkeiten man gegebenenfalls hat.
In den vorangegangenen Kapiteln wurden die Bedeutung von Tabellen und die Notwendigkeit, keine redundanten Daten in einer Datenbank zu halten, betont. In diesem Kapitel wird ein systematischer Ansatz gezeigt, mit dem man untersuchen kann, ob Tabellen potenzielle Probleme enthalten, die die spätere Arbeit wesentlich erschweren können. Hinter dem Ansatz stecken sogenannte Normalformen, wobei jede Normalform auf einen kritischen Aspekt in den Tabellen hinweist.
Stephan Kleuker
Kapitel 5. [*] Relationenalgebra
Zusammenfassung
In diesem Kapitel wird Ihnen gezeigt, dass die Bearbeitung von Tabellen auf einem mathematischen Fundament aufbaut. Diese Formalisierung ermöglicht es, exakte Aussagen über Datenbanken und ihre Bearbeitung zu formulieren.
Bisher wurden Tabellen definiert und es wurde informell beschrieben, wie man Informationen aus einzelnen Tabellen verknüpfen kann. Diese Form der Verknüpfung wird in diesem Kapitel mit einem mathematischen Ansatz genauer beschrieben. Besondere mathematische Fähigkeiten oder spezielle Kenntnisse werden nicht benötigt. Eventuell könnte das Kapitel ausgelassen werden, da vergleichbare Erkenntnisse auch aus den folgenden Kapiteln auf einem anderen Weg gewonnen werden können. Trotzdem bleibt das Kapitel auch für Leser ohne große Informatikkenntnisse nützlich, da man den Ansatz zur Nutzung relationaler Datenbanken wahrscheinlich leichter versteht, als wenn man sich direkt mit SQL beschäftigen muss. Das wurde durch Erfahrungen in der Lehre mehrfach bestätigt.
Stephan Kleuker
Kapitel 6. Formalisierung von Tabellen in SQL
Zusammenfassung
Nachdem in den vorangegangenen Kapiteln theoretische Grundlagen gelegt wurden, wird Ihnen in diesem Kapitel gezeigt, wie man mithilfe von der Sprache SQL Tabellen in Datenbanken definieren kann, sodass eine Bearbeitung mit der Datenbank-Software möglich wird.
Wichtig ist bei der Definition von Tabellen, dass nicht nur die Struktur der Tabellen in die Datenbank übertragen wird, sondern spezielle Randbedingungen, sogenannte Constraints, für die Tabellen definiert werden können. Mit diesen Constraints können Primär- und Fremdschlüsseleigenschaften sowie weitere Randbedingungen definiert werden, deren Einhaltung bei jeder Änderung der Tabelle vom Datenbank-Managementsystem überprüft werden. Constraints sind damit eine wertvolle Möglichkeit dafür zu sorgen, dass die eingetragenen Daten gewisse Qualitätskriterien erfüllen. Neben der reinen Definition von Tabellen wird auch vorgestellt, wie man Daten in die Tabellen einträgt, diese Daten ändert und löscht sowie nachträglich Tabellen verändern kann.
Stephan Kleuker
Kapitel 7. Einfache SQL-Anfragen
Zusammenfassung
Zentrale Aufgabe von Datenbanken ist es, dass sie die Kombination der enthaltenen Informationen ermöglichen. In diesem Kapitel erhalten Sie eine Einführung in die Erstellung von SQL-Anfragen, die zur Verknüpfung der Informationen genutzt werden.
Nachdem im vorherigen Kapitel gezeigt wurde, wie man in SQL Tabellen und ihre Inhalte definiert, soll in diesem und den beiden Folgekapiteln gezeigt werden, wie man durch Anfragen Informationen aus der Datenbank gewinnen kann. Zunächst geht es nur darum, die aktuell in den Tabellen eingetragenen Informationen abzurufen. Danach soll gezeigt werden, wie man durch die Kombination von Tabellen und die geschickte Formulierung von Verknüpfungsbedingungen zu weiteren Erkenntnissen kommen kann.
Stephan Kleuker
Kapitel 8. Gruppierungen in SQL
Zusammenfassung
Im vorherigen Kapitel wurden alle wichtigen Sprachkonstrukte von SQL zur einfachen Verknüpfung von Tabellen vorgestellt. SQL-Anfragen bieten neben der reinen Tabellenverknüpfung auch die Möglichkeit, Auswertungen für einzelne oder für mehrere Attribute durchzuführen. Damit kann man z. B. in einer Anfrage herausfinden, wie oft verschiedene Attributswerte in einer Spalte vorkommen. Für diesen Ansatz wird das SQL-Sprachkonstrukt GROUP BY genutzt, das Ihnen in diesem Kapitel genauer vorgestellt werden soll.
Weiterhin wird gezeigt, wie man die bisherigen Erkenntnisse über die Erstellung recht komplexer Anfragen mit den Gruppierungsmöglichkeiten kombinieren kann.
Stephan Kleuker
Kapitel 9. Verschachtelte Anfragen in SQL
Zusammenfassung
Nachdem in den letzten beiden Kapiteln alle Grundlagen für einfache Anfragen, die unterschiedlichen syntaktischen Möglichkeiten und die verschiedenen Herangehensweisen an die Anfragenerstellung gezeigt wurden, steht in diesem Kapitel die Möglichkeit zur Verknüpfung von Anfragen im Mittelpunkt. Es wird gezeigt, wie einzelne Anfragen mit ihren Ergebnissen in andere Anfragen eingebaut werden können. Sie lernen dabei schrittweise sehr mächtige, aber auch komplexe Anfragen zu erstellen.
Dabei werden unterschiedliche Stile und Vorgehensweisen diskutiert, wie man für die gleiche Aufgabe zu unterschiedlichen Lösungsansätzen kommen kann. Dies ist interessant, weil der „einfachste Lösungsweg“ bei nicht-trivialen Anfragen nicht nur vom Wissen über SQL, sondern auch von den Denkstrukturen des Anfragenschreibers abhängt und so ein individueller Lösungsweg entwickelt werden k ann.
Stephan Kleuker
Kapitel 10. Transaktionen
Zusammenfassung
Datenbanken werden meist von vielen Nutzern beziehungsweise Prozessen fast gleichzeitig genutzt. Dieses Kapitel zeigt Ihnen die möglichen Gefahren und Lösungsansätze.
In den bisherigen Kapiteln wurde implizit angenommen, dass man alleine am System arbeitet. Dies ist bei großen Datenbanken typischerweise nicht der Fall. Um die Arbeit nicht unnötig zu verkomplizieren, sollte das Datenbank-Managementsystem dafür sorgen, dass der Nutzer auf andere Nutzer keine Rücksicht nehmen muss. In diesem Kapitel wird gezeigt, dass diese Aufgabe zwar grundsätzlich vom Datenbank-Managementsystem übernommen wird, es aber sinnvoll ist, sich über kritische Situationen Gedanken zu machen. Wenn zwei Nutzer die gleiche Zeile gleichzeitig verändern wollen, ist es nicht möglich, beiden Nutzern das Gefühl zu geben, alleine an der Datenbank zu arbeiten. Generell muss bei jeder Aktion damit gerechnet werden, dass sie abgebrochen wird, da es einen Konflikt mit einer anderen Aktion gibt.
Stephan Kleuker
Kapitel 11. Rechte und Views
Zusammenfassung
Oft enthalten Datenbanken sehr komplexe Tabellen und Informationen, die nicht jedem Nutzer zugänglich sein sollen. In diesem Kapitel lernen Sie, wie man Informationen für Nutzer filtern und gegen unberechtigte Zugriffe sichern kann.
Häufig werden viele Daten in einer Tabelle zusammengefasst, von denen nur wenige für konkrete Aufgaben benötigt werden. Oft ist es auch der Fall, dass die restlichen Daten vom Bearbeiter der Aufgabe nicht eingesehen werden dürfen. Dies sind zwei Gründe, warum Views in SQL eingeführt wurden. Mit ihnen ist es weiterhin möglich, Anfrageergebnisse wie einfache Tabellen in weiteren Anfragen zu nutzen.
Stephan Kleuker
Kapitel 12. Stored Procedures und Trigger
Zusammenfassung
Der bisherige Text orientierte sich am SQL-Standard, sodass die vermittelten Kenntnisse fast vollständig auf alle größeren Datenbank-Managementsysteme übertragen werden können. Für die Themen dieses Kapitels gilt zwar auch, dass sie für alle Datenbank-Managementsysteme behandelt werden, diese Behandlung aber meist vom Standard abweicht. Der pragmatische Grund dafür ist, dass die vorgestellten Ideen bereits relativ früh in den Datenbanken großer Hersteller realisiert wurden und der Standard später entwickelt wurde. Um kompatibel mit älteren Lösungen der Nutzer zu bleiben, hat eine vollständige Anpassung an den Standard bei den Herstellern nicht stattgefunden.
Mit Stored Procedures und Trigger kann die Funktionalität von Datenbank-Managementsystemen erweitert werden. Stored Procedures erlauben es, in der Datenbank Berechnungen durchzuführen und die Ergebnisse in anderen Berechnungen, sowie Anfragen zu nutzen. Dabei stehen praktisch alle bisher beschriebenen SQL-Datenbankbefehle zur Verfügung. In Triggern kann man überprüfen, ob Datenbankaktionen, wie das Hinzufügen, Verändern und Löschen erlaubt sind. Dabei kann wieder auf alle Tabellen des Systems zugegriffen werden. In diesem Kapitel werden wesentliche Sprachkonstrukte der zugehörigen Programmiersprache PL/SQL vorgestellt.
Stephan Kleuker
Kapitel 13. Einführung in JDBC
Zusammenfassung
Datenbanken sind meist Grundlage komplexer Software-Systeme, die so ihre Daten verwalten. Bei der Programmierung muss aus der Programmiersprache auf die Datenbank zugegriffen werden. Einen oft verbreiteten Weg in Java stellt die in diesem Kapitel vorgestellte Anbindung mit JDBC dar. JDBC ermöglicht die Ausführung von SQL-Befehlen und die Nutzung der aus den Befehlen resultierenden Ergebnisse. Ideen von JDBC finden sich in anderen Programmiersprachen wieder.
Dieses Kapitel beschreibt schrittweise eine Möglichkeit zum Verbindungsaufbau, zum Stellen von Anfragen und zur weiteren Nutzung der Datenbank. Tiefgreifende Java-Kenntnisse werden nicht benötigt, grundlegende Erfahrungen in objektorientierter Programmierung sollten ausreichen.
Stephan Kleuker
Kapitel 14. Testen von Datenbanksystemen
Zusammenfassung
Bereits in den vorherigen Kapiteln wurde gezeigt, dass man seine umgesetzten Ideen austesten muss. Dies bedeutet zu überprüfen, ob die ursprünglich erstellten Anforderungen in der gewünschten Form umgesetzt wurden. Es ist dabei zu prüfen, ob das gewünschte Verhalten eintritt und zusätzlich, wie sich das System in Randsituationen, z. B. bei leeren Tabellen oder NULL-Werten verhält.
Dieses Kapitel gibt einen kurzen Einblick, wie man systematisch Datenbank-Software testen kann, dabei liegt der Fokus hier auf den Tabellenstrukturen, sowie den in PL/SQL geschriebenen Erweiterungen mit Triggern, Prozeduren und Funktionen.
Stephan Kleuker
Kapitel 15. Objekt-relationales Mapping
Zusammenfassung
Neben der vorgestellten Möglichkeit, in Programmiersprachen auf Daten einer Datenbank zuzugreifen, ist es genauso wichtig, Daten in die Datenbank effizient direkt zu schreiben und wieder zu lesen. Generell wurde mit JDBC dazu eine Möglichkeit gezeigt, allerdings ist diese in der Alltagsnutzung für objektorientierte Programmiersprachen recht aufwendig. Es muss individuell für jedes Klassenmodell festgelegt werden, welche Tabellen wie zu nutzen sind. Dabei ist auch festzulegen, wie mit Vererbung umgegangen werden muss. Statt diese Schritte individuell durchzuführen, bieten alle großen Programmiersprachen sogenannte Objekt-relationale-Mapper (OR-Mapper) zur Abbildung von Objekten auf Tabellen als Frameworks an. Dieses Kapitel gibt eine Einführung in die Nutzung und zeigt einige Klippen auf. Es wird deutlich, dass OR-Mapper die automatische Erstellung von Tabellen aus Klassen ermöglichen und die generelle Datenbanknutzung wesentlich vereinfachen. Es wird aber genauso deutlich, warum das bisher in diesem Buch gesammelte Wissen benötigt wird, um sinnvoll mit OR-Mappern zu arbeiten.
Die Entwicklung von Datenbanken schreitet kontinuierlich voran, angebunden an die sie nutzende Technologie. Dabei stellt sich seit den 1990er Jahren die Frage, ob der relationale Ansatz basierend auf meist größeren Mengen an Tabellen immer sinnvoll ist. Mit dem Aufkommen der kommerziellen Nutzung der objektorientierten Programmierung wurden objektorientierte Datenbanken populär, da sie das Persistieren und Suchen von Objekten erleichterten. Dieser Vorteil wurde allerdings durch eine schwächere Performance gegenüber relationalen Datenbanken wieder zunichte gemacht. Generell lässt sich feststellen, dass relationale Datenbanken sich kontinuierlich durchgesetzt haben und in fast allen großen Projekten eingesetzt werden. Trotzdem bleibt die Frage spannend, ob andere Ansätze für spezielle Aufgaben nicht doch besser geeignet sind. Dabei bezieht sich „besser“ insbesondere auf die Performance sowie die einfachere und damit fehlerfreiere Entwicklung.
Stephan Kleuker
Kapitel 16. NoSQL mit MongoDB und Java
Zusammenfassung
Die Entwicklung von Datenbanken schreitet kontinuierlich voran, angebunden an die sie nutzende Technologie. Dabei stellt sich seit den 1990er Jahren die Frage, ob der relationale Ansatz basierend auf meist größeren Mengen an Tabellen immer sinnvoll ist. Mit dem Aufkommen der kommerziellen Nutzung der objektorientierten Programmierung wurden objektorientierte Datenbanken populär, da sie das Persistieren und Suchen von Objekten erleichterten. Dieser Vorteil wurde allerdings durch eine schwächere Performance gegenüber relationalen Datenbanken wieder zunichte gemacht. Generell lässt sich feststellen, dass relationale Datenbanken sich kontinuierlich durchgesetzt haben und in fast allen großen Projekten eingesetzt werden. Trotzdem bleibt die Frage spannend, ob andere Ansätze für spezielle Aufgaben nicht doch besser geeignet sind. Dabei bezieht sich „besser“ insbesondere auf die Performance sowie die einfachere und damit fehlerfreiere Nutzung während der Entwicklung.
Die Ansätze werden im Gebiet NoSQL-Datenbanken zusammengefasst und beinhalten sehr unterschiedliche Lösungsstrategien, die erfolgreich für große Spezialaufgaben eingesetzt werden. Dieses Kapitel stellt die Gründe für NoSQL-Datenbanken und die wichtigsten Ansätze zunächst vor, um dann einen prominenten Vertreter mit der MongoDB genauer zu betrachten. Dabei steht nicht der gesamte Entwicklungsprozess im Vordergrund, sondern die Integration in eine die Datenbank nutzende Umgebung. Es wird gezeigt, wie der Zugriff von Java aus aussieht und welche Analogien bei der Nutzung zu relationalen Datenbanken auftreten.
Stephan Kleuker
Kapitel 17. Zusammenfassung und Ausblick
Zusammenfassung
In diesem Buch wurde der klassische Weg der Datenbankentwicklung beschrieben. Es wurde gezeigt, dass die Anforderungen, welche Daten betrachtet werden müssen, im intensiven Dialog mit den Nutzern des resultierenden Systems ermittelt werden. Das erhaltene Modell kann automatisch in Tabellenstrukturen übersetzt werden, wobei für die resultierenden Tabellen geprüft werden muss, dass sie gewisse Qualitätseigenschaften haben.
Stephan Kleuker
Backmatter
Metadaten
Titel
Grundkurs Datenbankentwicklung
verfasst von
Stephan Kleuker
Copyright-Jahr
2024
Electronic ISBN
978-3-658-43023-8
Print ISBN
978-3-658-43022-1
DOI
https://doi.org/10.1007/978-3-658-43023-8