Ein wesentlicher Vorteil der Verwendung eines RDBMS ist die „referentielle Integrität“. Referentielle Integrität bezieht sich auf die Genauigkeit und Konsistenz von Daten. Diese Datenintegrität wird durch die Verwendung dieser Primär- und Fremdschlüssel erreicht.
Referentielle Integrität bewahrt die Datenintegrität durch „Constraints“. Constraints sind die Regeln, die die Genauigkeit der Daten erzwingen, indem sie verhindern, dass ein Bezugsdatensatz gelöscht wird, ohne dass zuvor der primäre Datensatz in der Haupttabelle gelöscht wurde. Wenn eine Primär-Fremdschlüssel-Beziehung ordnungsgemäß hinzugefügt wurde, wird beim Versuch, einen Primärdatensatz zu löschen, ohne zuvor die Bezugsdatensätze aus anderen Tabellen zu entfernen, die Transaktion blockiert, bis die Bezugsdatensätze entfernt sind. Dadurch wird verhindert, dass so genannte „verwaiste Datensätze“ entstehen, d. h. referenzierte Datensätze in einer Tabelle, die keinen primären Datensatz in der Haupttabelle mehr haben.
Die drei Regeln, die die referentielle Integrität durchsetzt, sind:
1. Ein Fremdschlüssel muss einen entsprechenden Primärschlüssel haben. („No orphans“-Regel.)
2. Wenn ein Datensatz in einer Primärtabelle gelöscht wird, müssen alle Bezugsdatensätze, die auf den Primärschlüssel verweisen, ebenfalls gelöscht werden, was in der Regel durch Kaskadenlöschung erreicht wird.
3. Wenn sich der Primärschlüssel für einen Datensatz ändert, müssen alle entsprechenden Datensätze in anderen Tabellen, die den Primärschlüssel als Fremdschlüssel verwenden, ebenfalls geändert werden. Dies kann durch eine Kaskadenaktualisierung erreicht werden.
Die Abfrage der Daten in einem relationalen Datenbankmanagementsystem erfolgt mit Hilfe der Structured Querying Language (SQL), einer robusten Sprache, die für die Verwaltung der in einer relationalen Datenbank gespeicherten Daten entwickelt wurde.
SQL verfügt über die Fähigkeit, Datensätze zu erstellen, abzurufen, zu aktualisieren und zu löschen, und stützt sich in hohem Maße auf diese Primär-/Fremdschlüsselbeziehung, um zusammengehörige Daten in mehreren Tabellen zu identifizieren. Die Fähigkeiten von SQL machen das relationale Datenbanksystem zur ersten Wahl für alle Anwendungen, die starke Transaktionsfunktionen, Data Mining und komplexe Berichte erfordern.
Diese SQL-Anweisung demonstriert das Abrufen einer Ergebnismenge, wie alle Verkaufsdatensätze für einen einzelnen Mitarbeiter mit EmployeeId = 1 abgerufen werden würden.
SELECT * FROM Mitarbeiter
JOIN Umsatz ON Mitarbeiter.MitarbeiterId = UMSATZ.MitarbeiterId
WHERE MitarbeiterId = 1
Die nächste SQL-Anweisung ist ein Beispiel für eine Abfrage, die Joins für mehrere Tabellen implementiert. In diesem Fall ruft die SQL-Abfrage alle Mitarbeiter-, Verkaufs- und Kundeninformationen aus der Tabelle „Customers“ ab.
SELECT * FROM Employees
JOIN Sales ON Employees.EmployeeId = SALES.EmployeeId
JOIN Customers ON Customers.CustomerId = SALES.CustomerId
WHERE EmployeeId = 1
Relationale Datenbanken bieten auch Funktionen, die als „Indizierung“ bezeichnet werden. Ein Datenbankindex ist eine Datenstruktur, die die Geschwindigkeit des Datenabrufs verbessert. Indizes werden in der Regel zu Datenfeldern hinzugefügt, die routinemäßig zur Abfrage und Verknüpfung von Tabellen verwendet werden. In den obigen SQL-Anweisungen wären EmployeeId und CompanyId Kandidaten für diese Art der Optimierung.
Nicht-relationale Datenbanken
Die nicht-relationale Datenbank, oder NoSQL-Datenbank, speichert Daten. Im Gegensatz zur relationalen Datenbank gibt es jedoch keine Tabellen, Zeilen, Primärschlüssel oder Fremdschlüssel. Stattdessen verwendet die nicht-relationale Datenbank ein Speichermodell, das für die spezifischen Anforderungen des zu speichernden Datentyps optimiert ist.
Zu den populäreren NoSQL-Datenbanken gehören MongoDB, Apache Cassandra, Redis, Couchbase und Apache HBase.
Es gibt vier populäre nicht-relationale Typen: Dokumentendatenspeicher, spaltenorientierte Datenbank, Schlüsselwertspeicher und Graphdatenbank. Oft werden Kombinationen dieser Typen für eine einzige Anwendung verwendet.
Dokumentendatenspeicher
Ein Dokumentendatenspeicher verwaltet eine Reihe von benannten Stringfeldern und Objektdatenwerten in einer als „Dokument“ bezeichneten Entität, die typischerweise in Form von JSON-Dokumenten gespeichert wird, die auf verschiedene Weise kodiert werden können, einschließlich XML, YAML, JSON, BSON oder als reiner Text. Die Felder innerhalb der Dokumente sind offengelegt, so dass eine Anwendung Daten anhand von Feldwerten abfragen und filtern kann.
Die Dokumentenspeicher erfordern nicht, dass alle Dokumente identische Datenstrukturen aufweisen, was eine große Flexibilität bietet. Es ist daher leicht zu erkennen, wie diese Flexibilität genutzt werden kann, wenn sich die Anforderungen eines Unternehmens ändern.
Spaltenorientierte Datenspeicher
Ein spaltenorientierter Datenspeicher organisiert Daten in Spalten, was konzeptionell der relationalen Datenbank ähnelt. Der wahre Vorteil einer spaltenorientierten Datenbank liegt in ihrem denormalisierten Ansatz zur Strukturierung spärlicher Daten, der sich aus ihrem spaltenorientierten Ansatz zur Speicherung von Daten ergibt.
Schlüssel-Wert-Speicher
Dies ist die am wenigsten komplizierte der NoSQL-Datenbanken und, wie der Name schon sagt, ist der Schlüssel-Wert-Speicher einfach eine Sammlung von Schlüssel-Wert-Paaren, die in einem Objekt enthalten sind.
Dokumentenspeicher
Dokumentenspeicher sind etwas komplexer als Key-Value-Speicher. Sie gehen nicht von einer bestimmten, durch ein Schema festgelegten Dokumentenstruktur aus. Der Dokumentenspeicher ist darauf ausgelegt, alltägliche Dokumente so zu speichern, wie sie sind, und sie ermöglichen komplizierte Abfragen.
MongoDB und CouchDB sind beides Beispiele für Dokumentenspeicher.
Grafische Datenbanken
Der letzte ist der komplexeste nicht-relationale Datenbanktyp. Er ist darauf ausgelegt, Beziehungen zwischen Entitäten effizient zu speichern. Wenn Daten stark miteinander verbunden sind, wie z. B. bei Einkaufs- und Fertigungssystemen oder Referenzkatalogen, sind Graphdatenbanken eine gute Lösung.
Die Möglichkeiten für Graph-NoSQL-Datenbanken sind unbegrenzt, und da die von uns erfassten Daten immer stärker miteinander verbunden sind, werden Graphdatenbanken weiterhin an Beliebtheit gewinnen und die immer noch dominierende relationale Datenbank ablösen.
Anstelle der Strukturabfragesprache (SQL), die von relationalen Datenbanken verwendet wird, verwendet die NoSQL-Datenbank das Object-relational-mapping (ORM). Das Konzept von ORM ist die Möglichkeit, Abfragen in der von Ihnen bevorzugten Programmiersprache zu schreiben. Einige der beliebtesten ORMs sind Java, Javascript, .NET und PHP.
Zusammenfassung
Was Sie über relationale Datenbanken wissen müssen:
-
Sie arbeiten mit strukturierten Daten.
-
Beziehungen im System haben Beschränkungen, was ein hohes Maß an Datenintegrität fördert.
-
Es gibt unbegrenzte Indizierungsmöglichkeiten, was zu schnelleren Abfrage-Antwortzeiten führt.
-
Sie sind hervorragend geeignet, um Datentransaktionen sicher zu halten.
-
Sie bieten die Möglichkeit, komplexe SQL-Abfragen für die Datenanalyse und das Berichtswesen zu schreiben.
-
Ihre Modelle können Geschäftsregeln auf der Datenebene sicherstellen und durchsetzen, wodurch ein Maß an Datenintegrität erreicht wird, das in einer nicht-relationalen Datenbank nicht gegeben ist.
-
Sie sind tabellen- und zeilenorientiert.
-
Sie verwenden SQL (strukturierte Abfragesprache) zur Gestaltung und Manipulation von Daten, was sehr leistungsfähig ist.
-
Beispiele für SQL-Datenbanken: MySql, Oracle, Sqlite, Postgres und MS-SQL. NoSQL-Datenbank-Beispiele: MongoDB, BigTable, Redis, RavenDb, Cassandra, Hbase, Neo4j und CouchDb.
-
SQL-Datenbanken eignen sich am besten für anspruchsvolle transaktionale Anwendungen.
Nicht-relationale/NoSQL-Datenbanken:
-
Sie sind in der Lage, große Datenmengen mit wenig Struktur zu speichern.
-
Sie bieten Skalierbarkeit und Flexibilität, um wechselnde Geschäftsanforderungen zu erfüllen.
-
Sie bieten schemafreie oder schema-on-read Optionen.
-
Sie haben die Fähigkeit, alle Arten von Daten „Big Data“ einschließlich unstrukturierter Daten zu erfassen.
-
Sie sind dokumentenorientiert.
-
NoSQL oder nicht-relationale Datenbanken Beispiele:MongoDB, Apache Cassandra, Redis, Couchbase und Apache HBase.
-
Sie sind am besten für die schnelle Anwendungsentwicklung geeignet. NoSQL ist die beste Wahl für die flexible Datenspeicherung mit wenig bis gar keinen strukturellen Einschränkungen.
-
Sie bieten ein flexibles Datenmodell mit der Möglichkeit, Daten beliebiger Struktur einfach zu speichern und zu kombinieren, ohne dass ein Schema geändert werden muss.
So, welche sollten Sie für Ihr Projekt wählen? Für die Antwort auf diese Frage können wir zum Anfang dieses Artikels zurückkehren. Diese beiden sehr unterschiedlichen Arten von Datenbanken sind auf ihre Weise gleichermaßen nützlich, aber aus unterschiedlichen Gründen und für unterschiedliche Anwendungsfälle. Die eine ist nicht unbedingt besser als die andere, und sowohl relationale als auch nicht-relationale Datenbanken haben ihre Berechtigung.
Kurz gesagt, es gibt keine einzig richtige Antwort. Welcher Datenbanktyp für Ihr Projekt am besten geeignet ist, lässt sich am besten durch eine Analyse der Anforderungen des Unternehmens und der zu erreichenden Anwendungsfunktionalität ermitteln.