NoSQL – Jenseits der relationalen Datenbanken
Eine Alternative zu relationalen Datenbanken stellen Key-Value-Stores und dokumentenorientierte Datenbanken dar. Die Grundprinzipien und wichtige Vertreter werden hier vorgestellt.
Relationale Datenbanken
Arbeitet man mit einer relationalen Datenbank, so steht vor dem eigentlichen Einrichten der Datenbank und dem Anlegen von Tabellen der Entwurf der Datenbank. Während erfahrene Nutzer dies bei kleinen Datenbanken auch im Kopf erledigen können, empfiehlt es sich bei etwas umfangreicheren Projekten, ein Datenbankschema in Form eines Entity-Relationship-Modells zu erstellen. Hier werden unter anderem die Beziehungen der Tabellen untereinander und Fremdschlüssel festgelegt (sogenannte Foreign Key Constraints. Anhand des Modells kann auch überprüft werden, ob die Datenbank komplett normalisiert ist, was gerade bei großen Datenbanken wichtig für das spätere fehlerfreie Arbeiten der Datenbank ist. Ist dies alles erledigt, können Datenbank, Tabellen und Tabellenfelder angelegt werden.
Tabellenfelder müssen in relationalen Datenbanken fest definiert sein. Das heißt, es wird ein Feldtyp (Integer, Float, Boolescher Wahrheitswert, Text usw.) sowie die Feldlänge festgelegt. Auch wenn Feldtyp und Feldlänge grundsätzlich im Nachhinein noch änderbar sind, bedeutet dies in der Regel einen (unter Umständen) erheblichen Aufwand und ein erhebliches Fehlerrisiko, gerade bei großen Datenbeständen. Deshalb muss man sich im Rahmen des Datenbankentwurfs auch zu Feldtypen und -längen eingehend Gedanken machen.
Die vordefinierten Felder haben z.B. bei Geschäftsanwendungen durchaus auch Sinn. Ist eine Kundennummer z.B. immer fünfstellig, so kann man das Feld kdnr als Typ Integer mit einer Länge von fünf definieren. Felder für Konten werden als Typ Decimal mit zwei Nachkommastellen definiert. Der Kundenname darf maximal 30 Zeichen lang sein (weil er sonst z.B. nicht mehr in das Adressfeld des Briefpapiers passt), also ist der Feldtyp Text mit einer Feldlänge von 30 Zeichen. Hier profitiert die Anwendung also vom Datenbankschema.
Ein Vorteil von relationalen Datenbanken ist, dass SQL auch einfache Rechenoperationen für Zahlenfelder unterstützt. So kann man z.B. die Summe oder den Mittelwert einer definierten Auswahl von Feldern direkt innerhalb der Datenbankabfrage berechnen lassen. Dies hat den Vorteil, dass man das gewünschte Ergebnis direkt erhält und die Berechnung nicht noch selbst implementieren muss.
SQL-basierte Datenbanken bieten in der Regel auch eine feingranulare Rechteverteilung. Hier können die Benutzer und deren Rechte (Lesen, Schreiben, Löschen, Ändern, Anlegen usw.) definiert werden, diese Rechte lassen sich dann zumindest tabellenweise, teilweise auch bis auf Spaltenebene, vergeben. Dies kann besonders nützlich bei Datenbanken sein, bei denen nicht alle Nutzer in jeder Tabelle lesen bzw. schreiben dürfen.
Etwas anders kann die Situation bei textlastigen Anwendungen wie einem Blog oder einem CMS aussehen. Hier ist vorher schlecht bis gar nicht abzuschätzen, wie viel Text der Autor schreibt. Ist er gerade in Schreiblaune, kann ein Blogeintrag vielleicht auch mehrere zehntausend Zeichen umfassen. Nun kennen die aktuellen Versionen relationaler Datenbanken auch Felder für lange Texte (also viele Zeichen) und reservieren dafür entsprechend Platz, was aber gerade bei kurzen Einträgen Verschwendung sein kann. Alternativ kann man den Text natürlich auch auf viele Felder mit einer Länge von z.B. 255 Zeichen aufteilen lassen. Dann benötigt man allerdings eine zusätzliche Tabelle in der Datenbank, in der gespeichert wird, welches Textfeld bzw. Textfragment zu welchem Blogeintrag gehört und in welcher Reihenfolge die Textteile zusammengesetzt werden müssen, was die Datenbank komplexer macht.
Die Komplexität der Datenbank ist ein nicht zu unterschätzender Faktor, gerade für Einsteiger in diesem Bereich. So hat das CMS Typo3, welches zugegebenermaßen recht umfangreich und leistungsfähig ist, in der Grundinstallation rund 40 Tabellen in der Datenbank. Aber auch einfachere Blogsystem und CMS legen in der Regel schon fünf bis zehn Tabellen an.
Zwei weitere, noch erwähnenswerte Vorteile von relationalen Datenbanken sind Transaktionen und Fremdschlüsselbeziehungen, welche nützlich sind, um die Datenbank konsistent zu halten. Transaktion bedeutet, dass mehrere Aktionen (z.B. erst einen Datensatz lesen und darauf basierend zwei neue Datensätze schreiben) zu einer Einheit zusammengefasst werden. Diese Einheit (=Transaktion) kann dann ausgeführt werden, und zwar nur komplett. Das heißt, schlägt eine Aktion fehl, werden alle bisherigen Aktionen wieder rückgängig gemacht.
Relationale Open-Source-Datenbanken
Relationale Open-Source-Datenbanken gibt es in diversen Ausführungen, welche alle individuelle Stärken und Schwächen haben. SQLite ist eine besonders leichtgewichtige und portable Datenbank und daher gerade für kleine Anwendungen und als eingebettete Datenbank populär. MySQL findet man häufig als Datenbank hinter Webanwendungen. Der Tabellentyp myisam ist recht schnell bei Schreib- und Lesevorgängen, bietet aber keine Transaktionen und es fehlt die Implementierung von Fremdschlüsseln. Beide Merkmale sind aber im Tabellentyp InnoDB verfügbar. Weiterhin bietet MySQL relativ einfache Replizierbarkeit, zumindest für eine Master-Slave-Replikation. Nachteilig bei MySQL ist, dass der SQL-Standard an einigen Stellen nicht konsequent bzw. gar nicht implementiert ist. PostgreSQL bietet eine fast vollständige Unterstützung des SQL-Standards und auch einige weitere Funktionen, welche gerade in Unternehmensanwendungen relevant und von Interesse sind.


