Relationale vs. Nicht Relationale Datenbanken


Von No-SQL Datenbanken hört man in den letzten Jahren immer häufiger. Dabei ist die vermeintlich „neue“ Datenbanktechnologie schon sehr alt und nicht für jede Webanwendung die beste Wahl. Deshalb stehen viele Entwickler und Projektteams vor der Entscheidung eine nicht-relationale oder eine relationale Datenbank für das Webprojekt zu wählen.

Der Unterschied


In einer Relationalen Datenbank sind Daten aus Tabellen miteinander verknüpft. In einer nicht-relationalen Datenbank sind diese also nicht miteinander verknüpft.

Ein Beispiel: In einem Mehrfamilienhaus gibt es 6 Wohnungen. Wir haben in einer relationalen Datenbank – einfach gesagt – 2 Tabellen. Tabelle „Haus“ und „Wohnung“. In der Tabelle Haus gibt es einen Eintrag: Unser Mehrfamilienhaus. In der Tabelle Wohnung, gibt es 6 Einträge: Jede Wohnung. Jede Wohnung ist mit einem Identifier z.B. einer Zahl verknüpft. In einer relationalen Datenbank wäre im Haus der Identifier der „Primärschlüssel“ und im Eintrag Wohnung die Haus ID der Fremdschlüssel. Eine Identifier ist dazu da um einen Datensatz eindeutig zu identifizieren. Im Fall einer Verknüpfung, also einer relatonalen Datenbank, werden so 2 Datensätze verbunden, um zu signalisieren, dass diese eine Abhängigkeit haben. So nach dem Motto: Wird das Haus abgerissen, werden auch die Wohnungen abgerissen. Wird ein Mehrfamilienhaus-Datensatz aus der Tabelle „Mehrfamilienhaus“ gelöscht, werden auch die Wohnungen aus der anderen Tabelle „Wohnungen“ gelöscht. Bei einer nicht-relationalen Datenbank sind diese beiden Datensätze nicht voneinander abhängig. Es liegt im ermessen des Entwicklers, die Daten dennoch widerspruchsfrei und konsistent zu halten.

Verknüpfte Tabellen und Datensätze werden jedoch vor allem beim Auslesen langsam. Dazu gibt es allerdings hilfreiche Maßnahmen wie z.B. durch den Einsatz von Indexen. Allerdings könnten Erweiterungen oder Änderungen aufgrund von z.B. zu vielen Abhängigkeiten zu einen erhöhten Mehraufwand führen. Diese Probleme soll No-SQL vorbeugen. No-SQL Datenbanken sind viel flexibler zu erweitern und im Regelfall auch schneller.

In einem komplexeren Konstrukt mit sogenannten EAV-Tabellen, wo mindestens 3 oder 4 Beziehungen von Tabellen nötig sind, bedeutet das aber auch, dass beim Auslesen dieser Daten diese Tabellen miteinander verknüpft sein müssen. Das wiederum ist ein großer Nachteil einer relationalen Datenbank. Bei komplexen Datenstrukturen macht es daher vielleicht sogar Sinn in einer relationalen Datenbank Daten redundant (also gewisse Daten in verschiedenen Tabellen mehrfach zu speichern) um sich einige Tabellenverknüpfungen zum Auslesen der Daten zu sparen. Eine Alternative dazu bietet eine Nicht-Relationale Datenbank, in der Datensätze aus verschiedenen Tabellen (bzw. in dem Kontext oft auch „Collections“ genannt“) nicht in Beziehung zueinanderstehen und sogar mehrfach gespeichert sind. Die Herausforderung hierbei liegt darin, diese Datensätze widerspruchsfrei zu halten. Wenn ich etwas in einem Datensatz ändere speichere, sollte dieser auch in anderen Datensätzen aktualisiert werden. Es kommt auf die Weblösung an, ob eine relationale oder eine nicht-relationale Datenbank zum Einsatz kommen sollte.

Fazit


Beide Datenbanktypen haben seine Vor- und Nachteile. Während eine relationale Datenbank eher träge beim Erweitern ist, aber die Daten einfacher Konsistent zu halten, müssen Die Datensätze in einer Nicht Relationalen vor allem durch den Programmierer konsistent gehalten werden. Die Folge bei Inkosistent wären kritische Fehler in der Anwendung, die die Datenbank anspricht.