Zum Inhalt springen

  • Beiträge
    72
  • Kommentare
    239
  • Aufrufe
    12.690

Modul: SQL und relationale Datenbanken


kurtchen

1.052 Aufrufe

Weiter ging es in meinem Online-Studium mit dem Modul "SQL und relationale Datenbanken". Dieses Modul war laut empfohlenem Studienplan für das zweite Semester vorgesehen. Bei den nötigen Grundlagen war allerdings nur "Grundlagen der Informatik 1" genannt. Grundkenntnisse der strukturierten und prozeduralen Programmierung sollten also reichen. Ich hatte schon "Grundlagen der Informatik 2" bestanden, war also der Meinung, gut gerüstet in den Kampf zu ziehen.

 

In diesem Kurs gab es zwei Lehrbücher:

- SQL: Der Einstieg in die deklarative Programmierung

- Datenbank-Anwendungen entwerfen & programmieren

 

Im SQL-Buch ging es zunächst um eine Einführung in diese Sprache. Wie bei der W3L üblich, gab es ein einführendes Kapitel, indem alle Themen des Buches knapp angerissen waren, so dass man ungefähr wusste, was im Laufe des Moduls auf einen zukommen würde. Das nächste Kapitel war dann detaillierter. Es ging um:

- Anlegen von Tabellen, Schlüsselspalten, Primärschlüssel

- Datentypen, Domains als selbst-definierte Wertebereiche

- Werteeinschränkungen durch Regeln

 

Hier fiel mir die erste Sache auf, an der ich mich im Kurs stören sollte: Zu Beginn des Kurses war erklärt worden, wie man auf seinem System MySQL und Firebird installiert. Ich war davon ausgegangen, das eine ODER das andere zu brauchen und MySQL bzw. MariaDB ist ja bei den meisten Linux-Systemen sowieso dabei. Der Kurs hat aber nicht den Anspruch, den Studierenden in ein bestimmtes Datenbanksystem einzuführen. Vielmehr geht es um SQL als Sprachstandard, der in verschiedenen Implementierungen mehr oder weniger konsequent und umfassend realisiert ist. MySQL und Firebird dienen als Beispiele für Implementierungen, die sich in verschiedenen Punkten unterscheiden. Viele Code-Beispiele aus dem Lehrbuch liefen unter MySQL nicht. Ich sah mich so gezwungen, zwischen MySQL und Firebird zu wechseln, Code in beiden Umgebungen auszuprobieren, meine eigenen Datenbanktabellen in beiden Systemen anzulegen, was Zeit kostete. Das kam mir anfangs sehr umständlich und didaktisch nicht gelungen vor. Im Laufe der Zeit wurde mir jedoch klar, um was es dem Kursautor ging. Ich sollte verstehen, was relationale Datenbanken sind und was SQL als allgemeiner Sprachstandard ist, unabhängig von einem bestimmten Produkt. Im Laufe des Kurses wurde ich flexibler und habe mir parallel auch noch PostgreSQL installiert, habe auch mit verschiedenen graphischen Tools experimentiert und dann wieder viel auf der Kommandozeile gearbeitet. Man bekommt ein Gefühl dafür, was den Kern von SQL ausmacht, der sich nicht so schnell ändert. Man erhält auch einen Eindruck davon, wie man arbeiten müsste, um eine Datenbank leichter auf eine andere Implementierung migrieren zu können. Am Ende des Moduls wusste ich, dass ich mich wenn nötig in jede Implementierung einarbeiten kann, weil einfach Grundlagen da sind, auf die ich mich verlassen kann. Es dauerte natürlich eine Weile, an diesem Punkt zu kommen, und so war ich in den ersten Kapiteln oft unzufrieden mit dem didaktischen Asatz, dessen Sinn ich noch nicht verstand.

 

Weitere Themen waren:

- Selektionen und Projektionen

- Spaltenausdrücke

- Suchen mit Mustern,

- Verknüpfte Ausdrücke

- Mengen als Vergleichswerte

- Einfügen und Aktualisieren von Datensätzen

- Restrukturieren von Tabellen

- Änderungen an Tabellen mit Daten

- Änderungen von Domänen

- Löschen von Informationen

- Spaltenfunktionen von Gruppierungen

 

Bis hierhin hatte man in der Regel mit einzelnen Tabellen gearbeitet. Der Kurs war bis hier auch recht syntaxlastig. Das machte sich auch in den Online-Tests bemerkbar, die zum Teil etwas spitzfindig formuliert waren. So halbwegs begriffen zu haben, reichte nicht. Zum Teil schien es mir, als seien bewusst kleine Ungenauigkeiten in die Fragen eingebaut, um dem Lernenden eine kleine Falle zu stellen und zu checken, ob er wirklich genau aufgepasst hatte. Auch das ärgerte mich zunächst. Ich lernte aber so auch, genauer hinzuschauen. Im Laufe der Zeit habe ich diese Art der Tests zu schätzen gelernt.

 

Auch die Einsendeaufgaben wurden auf diese Weise korrigiert. Ungefähr richtig reichte nicht. Mein Tutor erwartete Präzision. Die Rückmeldungen im Fehlerfall waren recht knapp, so dass ich gerade am Anfang oft nachhaken musste. Der Sinn blieb mir zunächst verborgen. Im Laufe der Zeit merkte ich, dass mir der Tutor immer nur einen kleinen Brocken hinwarf. Gerade genug, um selber einen Schritt weiter zu kommen. Ich habe gelernt, die Online-Dokumentationen intensiv zu nutzen und auch mit Sekundärliteratur zu arbeiten. Ein Stück weit meine Probleme selbstständig zu lösen, statt immer gleich um Hilfe zu bitten. Das Tolle war: Im Laufe der Zeit merkte ich, dass ich besser darin wurde, selbst nach Lösungen zu suchen.

 

Im letzten Kapitel des ersten Buches ging es dann erstmals um das, was relationale Datenbanken ausmacht: Um die Verknüpfung von Tabellen über Fremdschlüsselbeziehungen und die damit verknüpften Probleme der Konsistenzhaltung. Ein kleiner Nebenschauplatz war die Einrichtung von dynamischen Wertebereichen über Fremdschlüsselbeziehungen.

 

Nun kam das zweite Lehrbuch und das war deutlich anders als das erste. Ging es im ersten Lehrbuch relativ konkret darum, was man mit der Sprache SQL machen kann und wie man das konkret macht, kam hier erst mal viel Theorie:

- Relationen und Operationen auf Relationen

- relationsinterne und relationsübergreifende Abhängigkeiten

Hier ging es zum Teil recht mathematisch zu. Der Vorteil: Mit dem eher praktischen Vorwissen aus dem ersten Lehrbuch war dieser Teil etwas leichter verdaulich. Gut wäre es hier gewesen, ich hätte schon das Modul Mathe1 beendet. Das war aber bei mir nicht der Fall, weshalb dieser Teil des Kurses für mich etwas zäher ablief.

 

Es folgte ein recht umfangreicher Teil über Entwicklungsphasen einer Datenbank und darüber, wie man Sachverhalte und Beziehungen in Datenbanken modelliert. Insbesondere ging es darum, wie man Klassen, Vererbungsstrukturen und Assoziationen zwischen Klassen in Datenbanktabellen modelliert, also das, was man objekt-relationales Mapping nennt. Dieser Teil des Kurses war für mich sehr interessant, weil hier deutlich wurde, wie man objektorientierte Programmierung und Persistenz mit einem RDBMS zusammenbringen kann. Hier war ich heilfroh, "Grundlagen der Informatik 2" bereits bearbeitet zu haben, also die Einführung in die objektorientierte Programmierung. Ohne diese Grundlage wäre mir dieses Kapitel viel schwerer gefallen und ich finde, dass es für alle Studierenden sinnvoll wäre, diese Grundlage zu haben. Der Autor verwendete hier eine Erweiterung der UML, um Tabellenstrukturen zu modellieren und zu visualisieren. Dafür war auch ein graphisches Tool in Java mitgeliefert worden, dass auf meinem System allerdings gelegentlich "Zicken" machte und nicht immer stabil lief. Ich habe dann ein anderes Tools benutzt, um UML-Diagramme und Diagramme in erweiterter UML zu erstellen, was dann auch problemlos ging um vom Tutor ohne weiteres akzeptiert wurde.

 

In nächsten Teil des Kurses ging es um Verbunde:

- Theta-Verbunde

- Auto-Join

- Innere Verbunde

- Verschachtelung von Verbunden

- Äußere Verbunde

Eine Rolle spielte hier auch immer wieder, was mathematisch gesehen passiert, wenn kartesische Produkte großer Tabellen gebildet werden und wie der User oder das RDBMS diesen Aufwand minimiert.

 

Es folgten Kapitel über Unterabfragen, wobei insbesondere die korrelierten Unterabfragen schon etwas anspruchsvoller waren. Schließlich ging es noch um Mengenoperationen und den Umgang mit Views. Damit war der klausurrelevante Teil des Moduls abgedeckt.

 

Das Modul war aber noch lange nicht vorbei. Es kamen Kapitel zu:

- Datenschutz, Authentisierung, Gewährung von Privilegien, Entzug von Rechten, Rollen

- Stored Procedures, Mengenverarbeitung von Datensätzen, Trigger, Transaktionen

 

Gerade bei den letzten Themen gibt es große Unterschiede zwischen den Implementierungen. Hier begann ich auch, parallel zu Firebird mit PostgreSQL zu experimentieren.

 

Es folgte eine kurze Einführung in JDBC. Der letzte Teil war dann ein Überblick über alternative bzw. konkurrierende Konzepte zur relationalen Datenbank. Hier wurde ein theoretischer Überblick gegeben. Und es gab ein paar praktische Übungen mit der CouchDB. Das war jedoch eher ein Reinschnuppern und vertiefte in erster Linie das Verständnis für die besonderen Eigenschaften und auch Nachteile relationaler Datenbanken.

 

In diesem Kurs gab es zwei Abschlusstests und zwei Online-Klausuren, eine für jeden Kursteil. Die Bonuspunkte, die man so erwerben konnte, zählten darum nur jeweils zur Hälfte.

 

Für die Präsenzklausur hatte ich mich nicht optimal vorbereitet. Ich hatte vor allem den Umgang mit den Sprachelementen von SQL geübt. Bei den Aufgaben ging aber viel Zeit für Modellierung und Normalisierung drauf. Es mussten UML-Diagramme bzw. Diagramme in erweiterter UML gezeichnet werden, was in der Klausur natürlich von Hand geschieht. Da muss man sich beim Zeichnen schon ein bisschen Gedanken machten, wie am Ende alles gut aufs Blatt passt. Hier habe ich ein bisschen Zeit vergeudet. Zwar hatte ich das Zeichnen von Hand geübt, aber ich hätte hier noch mehr Energie reinstecken können. Dann wäre der Rest der Klausur entspannter gelaufen. Es folgte nämlich ein Teil, bei dem es konkreter um dem Umgang mit der Sprache SQL ging. Gegeben war eine Tabellenstruktur und nun sollten Abfragen formuliert werden, die bestimmte Informationen aus den Tabellen extrahierten. Viele Abfragen! Hier musste ich in kurzer Zeit eine Abfrage nach der anderen "hinschmieren", ohne Zeit zu haben, irgendetwas noch einmal zu überprüfen oder lange über die Antwort nachzudenken. Insofern war ich nach der Klausur in großer Sorge, viele Punkte verschenkt zu haben.

 

Diese Sorge war zum Glück unnötig. Ich hatte zu Hause geübt, solche Aufgaben auf Tempo zu lösen und hatte anscheinend viele Treffer, obwohl ich in der knappen Zeit nur "aus der Hüfte schießen" konnte. Trotzdem würde ich mich rückblickend betrachtet anders vorbereiten und vor allem den Themen "Modellierung" und "Normalisierung" mehr Aufmerksamkeit widmen.

 

Der Kurs ist eine gute Grundlage für "Grundlagen der Informatik 3". Dort geht es zwar hauptsächlich um GUI-Programmierung, aber Persistenz und Schnittstellen zu Datenbanken ist ein weiterer großer Themenbereich. Zwar erhält man in GdI3 eine knappe Einführung in MySQL, aber ich war schon sehr froh, mit einem umfangreicheren Vorwissen zu arbeiten.

 

Insgesamt habe ich aus dem Modul etwas anderes mitgenommen, als ich mir zu Beginn erwartet hatte: Ich wollte lernen, mit MySQL umzugehen. Gelernt habe ich etwas nützlicheres, nämlich was eine relationale Datenbank ist. Auch mit meinem Tutor war ich am Ende sehr zufrieden, der mich eben nicht "mit dem Löffel gefüttert" hat, sondern mir durch seine eher knappen Hilfestellungen immer gerade genug Material gegeben hat, um selber eine Lösung zu finden.

2 Kommentare


Empfohlene Kommentare

Danke für deine ausführlichen Bericht. Spannend fand ich vor allem, wie du dich zuerst daran gestoßen hast, sowohl MySQL als auch Firebird nutzen zu müssen und sich dann mit der Zeit für dich erschlossen hat, dass ein sinnvolles didaktisches Konzept dahinter stand. 

Link zu diesem Kommentar

Es geht ja auch darum, was man sinnvollerweise in der Fachkonzept-Schicht macht und was in der Persistenz-Schicht. Im Idealfall hat man eine schlanke Schnittstelle zur Persistenzschicht und könnte dann falls nötig, die Datenbank wechseln oder vorhandenen Code schnell an eine andere Datenbank anpassen. Das ist aber eher eines der Themen von "Grundlagen der Informatik 3", wo z.B. das DAO-Muster ausführlich behandelt wird.

 

Als nächstes plane ich, etwas zu "Mathe 1" zu schreiben.

Link zu diesem Kommentar

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden


×
  • Neu erstellen...