Was ist der Unterschied zwischen einer relationalen und einer nicht relationalen Datenbank?


82

Ich weiß, dass Lösungen wie MySQL, PostgreSQL und MS SQL Server relationale Datenbanksysteme sind und NoSQL, MongoDB usw. nicht relationale DBMS sind.

Was sind jedoch die Unterschiede zwischen den beiden Systemtypen?

Laienbegriffe sind vorzuziehen.

Vielen Dank.


11
Dies sind keine Hausaufgaben ... aber heute habe ich versucht, einem Freund die Unterschiede zu erklären, und irgendwie fing ich an, leer zu werden. Also dachte ich mir, ich würde hier suchen und habe keine befriedigenden Erklärungen gefunden. Also dachte ich würde fragen. Die Unterschiede, die ich sagte, sind, dass es bei RDBMS viele Tabellen und Verknüpfungen zwischen den Tabellen gibt. NoSQL hat nicht mehrere Tabellen, sondern nur eine Tabelle und verwendet Schlüsselwertpaare. Ich bin mir nicht sicher, ob dies eine genaue Beschreibung ist, also dachte ich mir, ich würde fragen.
Marcamillion

Ich fand diese Antworten nicht hilfreich, weil sie zu viel Zeit damit verbringen, darüber zu sprechen, wie schwierig die Frage ist, ohne die Frage tatsächlich zu beantworten. Nach dem Lesen dieses Blog-Beitrags denke ich, dass die Hauptidee ist, dass nosql beim Skalieren besser ist als sql dbs, dh beim Skalieren verteilt zu werden, dh mehr Rechenleistung auf einem einzelnen Computer ist keine Option mehr. Jamesserra.com/archive/2015/08/…
Mbigras

Antworten:


23

Relationale Datenbanken haben eine mathematische Basis (Mengenlehre, relationale Theorie), die in SQL == Structured Query Language destilliert werden.

Die vielen Formen von NoSQL (z. B. dokumentbasiert, graphbasiert, objektbasiert, Schlüsselwertspeicher usw.) können auf einer einzigen zugrunde liegenden mathematischen Theorie basieren oder nicht. Wie S. Lott richtig ausgeführt hat, haben hierarchische Datenspeicher tatsächlich eine mathematische Grundlage. Gleiches gilt für Graphendatenbanken .

Mir ist keine universelle Abfragesprache für NoSQL-Datenbanken bekannt.


"Haben Sie keine solchen mathematischen Grundlagen"? "Ja wirklich?" Hierarchische Datenbanken schienen mir ziemlich mathematisch. Im Vergleich dazu waren sie auch relativ einfach. Ich denke, die Leute in der XML-Datenbank haben eine ziemlich solide Sperre dafür, was in einer hierarchischen Datenbank getan werden kann (und was nicht).
S.Lott

Könnte meine Unwissenheit oder übermäßige Vereinfachung bei der Arbeit sein, S. Lott. Ich werde nach einer Referenz suchen.
Duffymo

1
Ich bin kein Experte in dieser Angelegenheit, aber da es sich um strukturierte Daten handelt, glaube ich, dass zumindest eine Teilmenge von SQL auf jedes Modell angewendet werden kann. Im Übrigen gefällt mir, wie Google eine SQL- bezogene Abfragesprache für den Big Table- Code verfügbar gemacht hat . Google.com/appengine/docs/python/datastore/… . Wirklich viel einfacher gemacht.
Filip Dupanović

43

Hmm, ich bin mir nicht ganz sicher, was deine Frage ist.

Im Titel fragen Sie nach Datenbanken (DB), während Sie im Textkörper nach Datenbankverwaltungssystemen (DBMS) fragen. Die beiden sind völlig unterschiedlich und erfordern unterschiedliche Antworten.

Ein DBMS ist ein Tool, mit dem Sie auf eine DB zugreifen können.

Anders als die Daten selbst ist eine Datenbank das Konzept, wie diese Daten strukturiert sind.

So wie Sie mit der Oriented Object-Methodik mit einem Compiler ohne OO-Unterstützung programmieren können oder umgekehrt, können Sie auch eine relationale Datenbank ohne RDBMS einrichten oder ein RDBMS zum Speichern nicht relationaler Daten verwenden.

Ich werde mich darauf konzentrieren, was Relational Database (RDB) bedeutet, und die Diskussion darüber, was Systeme tun, anderen überlassen.

Eine relationale Datenbank (das Konzept) ist eine Datenstruktur, mit der Sie Informationen aus verschiedenen 'Tabellen' oder verschiedenen Arten von Daten-Buckets verknüpfen können. Ein Daten-Bucket muss einen sogenannten Schlüssel oder Index enthalten (der es ermöglicht, jeden atomaren Datenblock innerhalb des Buckets eindeutig zu identifizieren). Andere Daten-Buckets können sich auf diesen Schlüssel beziehen, um eine Verbindung zwischen ihren Datenatomen und dem Atom herzustellen, auf das der Schlüssel zeigt.

Eine nicht relationale Datenbank speichert nur Daten ohne explizite und strukturierte Mechanismen, um Daten aus verschiedenen Buckets miteinander zu verknüpfen.

Wenn Sie bei der Implementierung eines solchen Schemas eine Papierdatei mit einem Index haben und in einer anderen Papierdatei auf den Index verweisen, um zu den relevanten Informationen zu gelangen, haben Sie eine relationale Datenbank implementiert, wenn auch eine recht einfache. Sie sehen also, dass Sie nicht einmal einen Computer benötigen (natürlich kann es sehr schnell langweilig werden, ohne dass einer hilft). Ebenso benötigen Sie kein RDBMS, obwohl ein RDBMS wohl das richtige Werkzeug für den Job ist. Das heißt, es gibt Unterschiede in Bezug auf die verschiedenen Tools, sodass die Auswahl des richtigen Tools für den Job möglicherweise nicht so einfach ist.

Ich hoffe, das sind Laienbegriffe genug und hilfreich für Ihr Verständnis.


"Wenn Sie eine Papierdatei mit einem Index haben und in einer anderen Papierdatei auf den Index verweisen, um zu den relevanten Informationen zu gelangen, haben Sie eine relationale Datenbank implementiert." Sehr gutes Beispiel. Wäre toll, wenn dies weiter ausgebaut wird, um Primärschlüssel, Fremdschlüssel usw. zu erklären
Zeni

Man muss nichts über Einschränkungen wissen oder irgendwelche deklarieren oder deklarieren müssen (einschließlich PKs, CKs & FKs), um eine relationale Datenbank zu verwenden. Sie sind für Integrität. Tabellen repräsentieren Relationen (Schiffe). Join & andere Operatoren verbinden Tabellen, um neue Tabellen zu erhalten, deren Relation (Schiff) Kombinationen der Relation (Schiff) von Argumenttabellen sind. Indizes dienen auch der Implementierungsoptimierung und sind für eine Datenbank / ein DBMS, die für ihre Benutzer relational ist, irrelevant.
Philipxy

22

Das meiste, was Sie "wissen", ist falsch.

Erstens, wie einige der relationalen Gurus routinemäßig (und manchmal strikt) hervorheben, passt SQL nicht annähernd so gut zur relationalen Theorie, wie viele Leute denken. Zweitens haben die meisten Unterschiede bei "NoSQL" relativ wenig damit zu tun, ob es relational ist oder nicht. Schließlich ist es ziemlich schwierig zu sagen, wie sich "NoSQL" von SQL unterscheidet, da beide eine ziemlich breite Palette von Möglichkeiten darstellen.

Der einzige große Unterschied, auf den Sie zählen können, besteht darin, dass fast alles, was SQL unterstützt, beispielsweise Trigger in der Datenbank selbst unterstützt - dh Sie können Regeln in die eigentliche Datenbank entwerfen, die sicherstellen sollen, dass die Daten immer intern konsistent sind. Sie können beispielsweise festlegen, dass Ihre Datenbank bestätigt, dass eine Person dies tun musseine Adresse haben. Wenn Sie dies tun, werden Sie jedes Mal, wenn Sie eine Person hinzufügen, gezwungen, diese Person einer Adresse zuzuordnen. Sie können eine neue Adresse hinzufügen oder sie einer vorhandenen Adresse zuordnen, aber auf die eine oder andere Weise muss die Person eine Adresse haben. Wenn Sie eine Adresse löschen, werden Sie gezwungen, entweder alle Personen zu entfernen, die sich derzeit an dieser Adresse befinden, oder sie einer anderen Adresse zuzuordnen. Sie können dasselbe für andere Beziehungen tun, z. B. sagen, dass jede Person eine Mutter haben muss, jedes Büro eine Telefonnummer haben muss usw.

Beachten Sie, dass diese Art von Dingen garantiert auch atomar abläuft. Wenn also jemand anderes die Datenbank betrachtet, während Sie die Person hinzufügen, sieht er die Person entweder überhaupt nicht oder er sieht die Person mit der Adresse (oder die Mutter usw.)

Die meisten NoSQL-Datenbanken versuchen nicht , diese Art der Durchsetzung in der eigentlichen Datenbank bereitzustellen. Es liegt an Ihnen, im Code, der die Datenbank verwendet, alle für Ihre Daten erforderlichen Beziehungen durchzusetzen. In den meisten Fällen können auch Daten angezeigt werden, die nur teilweise korrekt sind. Selbst wenn Sie einen Stammbaum haben, in dem jede Person mit den Eltern in Verbindung gebracht werden soll, kann es vorkommen, dass die von Ihnen auferlegten Einschränkungen nicht wirklich zutreffen durchgesetzt. Einige lassen Sie das nach Belieben tun. Andere garantieren, dass es nur vorübergehend passiert, obwohl genau fraglich ist, wie lange es dauern kann / wird.


9

Die relationale Datenbank verwendet ein formales System von Prädikaten, um Daten zu adressieren. Die zugrunde liegende physische Implementierung ist substanzlos und kann variieren, um für bestimmte Operationen zu optimieren. Sie muss jedoch immer das relationale Modell annehmen . Für Laien bedeutet das nur, dass ich genau weiß, wie viele Werte (Attribute) jede Zeile (Tupel) in meiner Tabelle (Beziehung) hat, und jetzt möchte ich die Tatsache entsprechend gründlich und extrem ausnutzen. Das ist die wahre Natur des Tieres. 

Da wir offensichtlich die Generation sind, die eine relationale Erziehung hatte, ist der erste offensichtliche Unterschied, wenn man NoSQL-Datenbankmodelle aus der Perspektive des relationalen Modells betrachtet, wiederum in Laienbegriffen, dass keine Annahmen über die Anzahl der Werte einer Zeile möglich sind enthalten wird immer gemacht. Dies vereinfacht die Angelegenheit wirklich zu sehr und gilt nicht sauber für die Feinheiten der physischen Modelle jeder NoSQL-Datenbank, aber es ist der Höhepunkt des relationalen Modells und die erste Annahme, die wir hinter uns lassen müssen, oder, wenn Sie lieber möchten, die größte Sprung müssen wir machen.

Wir können uns auf zwei Dinge einigen, die für jedes DBMS zutreffen: Es kann jede Art von Daten speichern und verfügt über genügend mathematische Grundlagen, um die Daten auf jede erdenkliche Weise verwalten zu können. Die Realität ist, dass Sie niemals den Fehler machen möchten, einen der beiden Punkte auf die Probe zu stellen, sondern sich nur an das halten möchten, wofür das eigentliche DBMS wirklich gemacht wurde. In Laienbegriffen: Respektiere das Tier in dir!

(Bitte beachten Sie, dass ich es vermieden habe, die (offensichtlich) fundierten Standards, die sich um das relationale Modell drehen, mit den vielen Varianten von NoSQL-Datenbanken zu vergleichen. Wenn Sie möchten, sollten Sie NoSQL-Datenbanken als Überbegriff für jedes DBMS betrachten, das nicht vollständig funktioniert Nehmen wir das relationale Modell an, unter Ausschluss von allem anderen. Die Unterschiede sind zu groß, aber das ist der Hauptunterschied, und der, von dem ich denke, dass er für Sie am nützlichsten wäre, um die beiden zu verstehen.)


6

Versuchen Sie, diese Frage in einer Ebene zu erklären, die sich auf ein wenig Technologie bezieht

Stellen Sie sich zum Vergleich MongoDB und Traditional SQL vor und stellen Sie sich das Szenario vor, einen Tweet auf Twitter zu veröffentlichen. Dieser Tweet enthält 9 Bilder. Wie speichern Sie diesen Tweet und die dazugehörigen Bilder?

In Bezug auf traditionelles Beziehungs-SQL können Sie die Tweets und Bilder in separaten Tabellen speichern und die Verbindung durch Erstellen einer neuen Tabelle darstellen.

Darüber hinaus können Sie ein Feld festlegen, das ein Bildtyp ist, und die 9 Bilder in ein Binärdokument komprimieren und in diesem Feld speichern.

Mit MongoDB können Sie ein Dokument wie dieses erstellen (ähnlich dem Konzept einer Tabelle in relationalem SQL):

{

"id":"XXX",

"user":"XXX",

"date":"xxxx-xx-xx",

"content":{

"text":"XXXX",

"picture":["p1.png","p2.png","p3.png"]

}

Daher besteht meiner Meinung nach der Hauptunterschied darin, wie Sie die Daten und die Speicherebene der Beziehungen zwischen ihnen speichern.

In diesem Beispiel sind die Daten der Tweet und die Bilder. Der unterschiedliche Mechanismus bezüglich der Speicherebene der Beziehung zwischen ihnen spielt auch eine wichtige Rolle für den Unterschied zwischen beiden.

Ich hoffe, dieses kleine Beispiel zeigt den Unterschied zwischen SQL und NoSQL (ACID und BASE).

Hier ist ein Bildlink zu den Zielen von NoSQL aus dem Internet:

http://icamchuwordpress-wordpress.stor.sinaapp.com/uploads/2015/01/dbc795f6f262e9d01fa0ab9b323b2dd1_b.png


wirklich gute Erklärung, es gibt einen Link, wo ich die erste Idee habe, ich hoffe, es könnte jemandem helfen. growthefuturenow.com/relational-vs-non-relational-database
Muhammad Sadiq

4

Der Unterschied zwischen relational und nicht relational ist genau das. Die relationale Datenbankarchitektur bietet Einschränkungsobjekte wie Primärschlüssel, Fremdschlüssel usw., mit denen zwei oder mehr Tabellen in einer Beziehung verknüpft werden können. Dies ist gut, damit wir unsere Tabellen normalisieren, dh Informationen darüber, was die Datenbank darstellt, in viele verschiedene Tabellen aufteilen, sobald die Integrität der Daten erhalten bleibt.

Angenommen, Sie haben eine Reihe von Tabellen mit Informationen zu einem Mitarbeiter. Sie können einen Datensatz nicht aus einer Tabelle löschen, ohne alle Datensätze, die sich auf einen solchen Datensatz beziehen, aus den anderen Tabellen zu löschen. Auf diese Weise implementieren Sie Datenintegrität. Die nicht relationale Datenbank bietet keine Konstrukte für diese Einschränkungen, mit denen Sie die Datenintegrität implementieren können.

Sofern Sie diese Einschränkung nicht in der Front-End-Anwendung implementieren, die zum Auffüllen der Datenbanktabellen verwendet wird, implementieren Sie ein Durcheinander, das mit dem Wilden Westen verglichen werden kann.


1

Lassen Sie mich zunächst sagen, warum wir eine Datenbank benötigen.

Wir benötigen eine Datenbank, um Informationen so zu organisieren, dass wir die gespeicherten Daten effizient abrufen können.

Beispiele für relationale Datenbankverwaltungssysteme (SQL):

1) Oracle-Datenbank

2) SQLite

3) PostgreSQL

4) MySQL

5) Microsoft SQL Server

6) IBM DB2

Beispiele für nicht relationale Datenbankverwaltungssysteme (NoSQL)

1) MongoDB

2) Cassandra

3) Redis

4) Couchbase

5) HBase

6) DocumentDB

7) Neo4j

Relationale Datenbanken haben normalisierte Daten, da Informationen in Tabellen in Form von Zeilen und Spalten gespeichert werden. Wenn Daten in normalisierter Form vorliegen, hilft dies normalerweise, die Datenredundanz zu verringern, und die Daten in Tabellen stehen normalerweise in Beziehung zueinander Wenn wir die Daten abrufen möchten, können wir die Daten mithilfe von Join-Anweisungen abfragen und Daten nach Bedarf abrufen. Dies ist geeignet, wenn wir mehr Schreibvorgänge, weniger Lesevorgänge und nicht viele Daten benötigen. Dies ist auch relativ einfach Aktualisieren Sie Daten in Tabellen als in nicht relationalen Datenbanken. Horizontale Skalierung nicht möglich, vertikale Skalierung bis zu einem gewissen Grad möglich. Konformität mit CAP (Konsistenz, Verfügbarkeit, Partitionstoleranz) und ACID (Atomizität, Konsistenz, Isolation, Dauer).

Lassen Sie mich anhand von PostgreSQL als Beispiel die Eingabe von Daten in eine relationale Datenbank zeigen.

Erstellen Sie zunächst eine Produkttabelle wie folgt:

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric
);

Fügen Sie dann die Daten ein

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99);

Schauen wir uns ein anderes Beispiel an: Geben Sie hier die Bildbeschreibung ein

Hier in einer relationalen Datenbank können wir die Schülertabelle und die Betreff-Tabelle mithilfe von Beziehungen über einen Fremdschlüssel und eine Betreff-ID verknüpfen. In einer nicht relationalen Datenbank müssen jedoch keine zwei Dokumente vorhanden sein, da keine Beziehungen vorhanden sind. Daher speichern wir alle Betreff-Details und Studentendetails in einem Dokument sagen Studentendokument, dann werden Daten dupliziert, was das Aktualisieren von Datensätzen schwierig macht.

In nicht relationalen Datenbanken gibt es kein festes Schema, Daten werden nicht normalisiert. Es werden keine Beziehungen zwischen Daten erstellt. Alle Daten werden meist in einem Dokument gespeichert. Gut geeignet für den Umgang mit vielen Daten und kann viele Daten gleichzeitig übertragen. Am besten, wenn große Lese- und Schreibvorgänge sowie weniger Aktualisierungen schwierig sind, Daten abzufragen, da kein festes Schema vorhanden ist. Horizontale und vertikale Skalierung ist möglich. Konformität mit CAP (Konsistenz, Verfügbarkeit, Partitionstoleranz) und BASE (grundsätzlich verfügbar, weicher Zustand, eventuell konsistent).

Lassen Sie mich ein Beispiel für die Eingabe von Daten in eine nicht relationale Datenbank mit Mongodb zeigen

db.users.insertOne({name: ‘Mary’, age: 28 , occupation: ‘writer’ })
db.users.insertOne({name: ‘Ben’ , age: 21})

Daher können Sie das in der Datenbank mit dem Namen db verstehen, und es gibt Sammlungen mit dem Namen users und ein Dokument mit dem Namen insertOne, zu dem wir Daten hinzufügen, und es gibt kein festes Schema, da unser erster Datensatz 3 Attribute und das zweite Attribut nur 2 Attribute hat Dies ist in nicht relationalen Datenbanken kein Problem, in relationalen Datenbanken jedoch nicht, da relationale Datenbanken ein festes Schema haben.

Schauen wir uns ein anderes Beispiel an

({Studname: ‘Ash’, Subname: ‘Mathematics’, LecturerName: ‘Mr. Oak’})

Daher können wir in nicht relationalen Datenbanken sehen, dass wir sowohl Schülerdetails als auch Fachdetails in ein Dokument eingeben können, da in nicht relationalen Datenbanken keine Beziehungen definiert sind. Hier kann dies jedoch zu Datenverdopplungen führen, und daher können Fehler bei der Aktualisierung auftreten.

Hoffe das erklärt alles


-1

Für Laien ist es stark strukturiert gegenüber unstrukturiert, was bedeutet, dass Sie unterschiedliche Anpassungsgrade für Ihre Datenbank haben. Unterschiede bei der Indexierung treten insbesondere dann auf, wenn Sie sicherstellen müssen, dass ein bestimmter Referenzindex mit einem anderen Element verknüpft werden kann -> dies ist eine Beziehung. Die strengere Struktur der relationalen Datenbank ergibt sich aus dieser Anforderung.

Zu beachten ist, dass NosDB offenbar sowohl relationale als auch nicht relationale DBs bietet und eine Möglichkeit bietet, sowohl http://www.alachisoft.com/nosdb/sql-cheat-sheet.html abzufragen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.