TL; DR
Durch die Normalisierung in RDBMS können Sie die Stärken des relationalen Paradigmas nutzen.
Durch Denormalisierung in NoSQL können Sie die Stärken des NoSQL-Paradigmas nutzen.
Lange Antwort
RDBMS sind großartig, weil Sie mit ihnen eindeutige strukturierte Entitäten (veränderlich oder nicht) und ihre Beziehungen zueinander modellieren können. Dies bedeutet, dass es sehr einfach ist, auf der Entitätsebene zu arbeiten, ihre Eigenschaften zu aktualisieren, eine andere einzufügen, eine andere zu löschen usw. Aber es ist auch großartig, sie dynamisch zusammenzufassen, einen Hund mit seinem Besitzer, einen Hund mit den Häusern, in denen sie sich befinden, usw Das RDBMS bietet Ihnen Werkzeuge, um all dies zu vereinfachen. Es wird für Sie zusammenarbeiten, es wird atomare Änderungen zwischen Entitäten für Sie verarbeiten usw.
NoSQL-Datenbanken sind großartig, weil Sie damit halb- / unstrukturierte Aggregate und dynamische Entitäten modellieren können. Dies bedeutet, dass es sehr einfach ist, sich ständig ändernde Entitäten zu modellieren, Entitäten, die nicht alle dieselben Attribute und hierarchischen Aggregate haben.
Um für NoSql zu modellieren, müssen Sie in Hierarchien und Aggregaten statt in Entitäten und Beziehungen denken. Sie haben also keine Person, Mietadressen und eine Beziehung zwischen ihnen. Sie haben Mietdatensätze, die für jede Person zusammenfassen, welche Mietadressen sie hatten.
Sie müssen sich fragen, welche Daten ich gemeinsam ändern muss. Welche Daten gruppieren die anderen Daten logisch. In Ihrem Fall klingt eine Person wie ein gutes Aggregat. Was ist der logische Einstiegspunkt in den Rest der Daten.
Mit NoSQL können Sie etwas speichern, das andere Dinge hat, die ihre eigenen Dinge haben. Gib mir die ganze Hierarchie der Dinge zurück. Lassen Sie es mich nach Belieben ändern. Ersetzen Sie jetzt die gesamte Hierarchie der Dinge durch meine geänderte. Das ist so ziemlich alles, was es dir gibt. Warum ist es nützlich? Wenn Sie eine Hierarchie von Dingen haben, mit denen Sie immer als Ganzes interagieren. Oder wenn Sie massiv skalieren müssen.
Alles, was RDBMS Ihnen sonst noch bietet, müssen Sie manuell in Code und in Ihrem Schema implementieren. Sie müssen sich dem Code anschließen, wenn Sie jemals ein Aggregat von Aggregaten benötigen. Sie müssen analysieren, wenn Sie nur einen Teil eines Aggregats benötigen. Sie müssen die Eindeutigkeit selbst prüfen, wenn Sie keine doppelten Angaben machen möchten. Sie müssen Ihre eigene Transaktionslogik implementieren, wenn Sie über Aggregate usw. arbeiten.
Wenn Sie also einen großen Tisch mit allem haben, was Sie brauchen, ist dies in NoSql der richtige Weg. Da die Atomizität nur auf dieser Ebene garantiert ist, und auch die Leistung. Es ist wichtig, dass Sie Ihre Beziehungen frühzeitig herausfinden. Das ist Denormalisierung.
In RDBMS lähmt die Denormalisierung Ihre Datenbank effektiv auf eine NoSQL-Datenbank. Normalerweise wollen Sie also das Gegenteil, das heißt Normalisierung. Wenn Sie dies nicht tun, sollten Sie stattdessen eine NoSQL-Datenbank verwenden. Es sei denn, Sie brauchen ein bisschen von beidem.