Datenbanken formen Architekturen: OO- vs. Relationale Welten

Datenbanken formen Architekturen: OO- vs. Relationale Welten

Software Architektur im Stream Jan 23, 2026 german 4 min read

Ein tiefer Einblick in den Einfluss von Datenbanken auf die Softwarearchitektur, vom Mismatch zwischen objektorientiertem Design und relationalen Modellen bis hin zu NoSQL und pragmatischen Persistenzansätzen.

Key Insights

  • Insight

    Es besteht ein inhärenter Unterschied in der Datenmodellierung zwischen objektorientierten (insbesondere Domain-Driven Design) und relationalen Datenbanken, der sich auf die Architektur auswirkt.

    Impact

    Dies erfordert eine bewusste Entscheidung für eine führende Modellierungsstrategie, um Konflikte und Ineffizienzen in der Softwarearchitektur zu minimieren.

  • Insight

    Ein rein objektorientierter Ansatz kann bei komplexen, datenbankübergreifenden Abfragen zu erheblichen Performance-Problemen führen, da die Datenbankoptimierungen nicht voll genutzt werden.

    Impact

    Entwickler müssen pragmatische Lösungen wie datenbankspezifische Abfragesprachen oder einfachere Persistenz-Patterns in Betracht ziehen, um die Performance kritischer Operationen zu gewährleisten.

  • Insight

    Das Teilen von Datenbankschemata über mehrere Anwendungen hinweg behindert die Modularisierung und die Änderbarkeit von Systemen erheblich.

    Impact

    Die Vermeidung geteilter Schemata ist entscheidend für die Agilität und langfristige Wartbarkeit von verteilten Systemen und fördert eine sauberere Bounded-Context-Trennung.

  • Insight

    Dokumentendatenbanken eignen sich gut für die direkte Abbildung von Aggregates im Sinne von DDD und bieten Vorteile bei der horizontalen Skalierung, erfordern jedoch eine sorgfältige Vorabmodellierung.

    Impact

    Eine fehlgeleitete Modellierung in Dokumentendatenbanken kann zu erheblichen Flexibilitäts- und Performanceproblemen bei späteren, unvorhergesehenen Abfragen führen.

  • Insight

    Für Anwendungsfälle mit geringer Geschäftslogik (z.B. reine Datenverschiebung) kann ein "Anemic Domain Model" oder Patterns wie Transaction Script und Data Gateways eine effizientere und transparentere Architektur darstellen.

    Impact

    Dies ermöglicht eine Reduzierung unnötiger Komplexität und erhöht die Entwicklungsgeschwindigkeit in spezifischen Kontexten ohne intensive Domain-Logik.

Key Quotes

"Ich glaube, der wesentliche Punkt ist dabei, dass ich mir nicht so sicher bin, ob man das eine oder das andere möchte als führendes Modell."
"Das ist etwas, wovor ich warnen würde, weil es eben bedeutet, dass wir Daten teilen. Und das bedeutet, dass wir halt diese Modellierung halt nicht ändern können."
"Wenn ich mich bei der Dokumentendatenbank vertuere bei der Modellierung, werde ich halt tatsächlich alle Voraussicht nach irgendwann sozusagen auf die Schnauze fallen."

Summary

Wie Datenbanken die Softwarearchitektur prägen

Die Wahl der Datenbanktechnologie und die Art und Weise, wie Daten persistiert werden, haben einen tiefgreifenden Einfluss auf die Softwarearchitektur. Die traditionelle Konfrontation zwischen objektorientiertem Design (insbesondere Domain-Driven Design, DDD) und relationalen Datenbankmodellen führt oft zu Spannungen und erfordert bewusste architektonische Entscheidungen. Dieser Artikel beleuchtet die Kernprobleme, verschiedene Lösungsansätze und die Rolle von NoSQL-Datenbanken.

Der Mismatch: OO gegen Relational

Das Domain-Driven Design (DDD) strebt ein reichhaltiges objektorientiertes Modell an, in dem Aggregates (fachlich zusammengehörige Objekte mit Logik) im Mittelpunkt stehen. Repositories bieten hierbei die Illusion einer Sammlung dieser Aggregates, ohne die darunterliegende Persistenz preiszugeben. Im Gegensatz dazu basieren relationale Datenbanksysteme auf einer normalisierten Tabellenstruktur mit starken Konsistenzgarantien durch Transaktionen, die über mehrere Tabellen hinweg wirken können. Das Festhalten an einer rein objektorientierten Sicht kann bei komplexen Abfragen über mehrere "Aggregates" hinweg zu erheblichen Performance-Problemen führen, da native Datenbankoptimierungen wie Indizes oder Query-Optimizer nicht effizient genutzt werden.

Pragmatische Persistenzansätze

Um diesem Mismatch zu begegnen, existieren verschiedene Persistenz-Patterns. Object-Relational Mapper (ORMs) wie JPA versuchen, die Lücke zwischen OO-Modell und relationaler Datenbank zu schliessen. Sie bieten jedoch oft eigene Abfragesprachen (z.B. JPQL), um performante Datenbankabfragen zu ermöglichen, was die "reine" objektorientierte Abstraktion durchbricht. Für weniger komplexe Fälle oder zur gezielten Leistungsoptimierung können Patterns wie Active Record (Objekte repräsentieren eine Zeile und enthalten Domain-Logik und Persistenzmethoden), Transaction Script (Geschäftslogik als Prozeduren, die direkt mit der Datenbank interagieren) oder Row/Table Data Gateway (Objekte als reine Schnittstellen zu Zeilen oder Tabellen, ohne Domain-Logik) eine sinnvolle Alternative sein. Diese "näher an der Datenbank"-Ansätze können bei hohem Datendurchsatz oder einfacher Logik die Transparenz und Kontrollmöglichkeit über Datenbankoperationen erhöhen.

Die Rolle von NoSQL und Dokumentendatenbanken

Dokumentendatenbanken wie MongoDB, die Daten in JSON-artigen Dokumenten speichern, scheinen auf den ersten Blick besser zum Aggregate-Konzept von DDD zu passen. Ein Aggregate kann direkt als Dokument abgebildet werden, was die Persistenz vereinfacht und horizontale Skalierung erleichtert. Allerdings geht diese Einfachheit oft zulasten der Abfrageflexibilität. Während relationale Datenbanken komplexe Ad-hoc-Abfragen über diverse Tabellen hinweg effizient ausführen können, erfordern Dokumentendatenbanken eine sorgfältigere Vorabmodellierung der Dokumente, um Performance-Einbrüche bei übergreifenden Analysen zu vermeiden.

Fazit und Empfehlungen

Die Entscheidung für eine bestimmte Architektur und Persistenzstrategie ist kein Dogma, sondern eine pragmatische Abwägung. Es gibt keinen "one-size-fits-all"-Ansatz. Die Schlüssel sind die Bewertung der Geschäftslogik, der Performance-Anforderungen und der gewünschten Flexibilität. Ein kritischer Punkt ist zudem das Teilen von Datenbankschemata über mehrere Anwendungen hinweg, was die Systemevolution erheblich erschwert und vermieden werden sollte. Die bewusste Wahl und Kombination von Persistenz-Patterns führt zu widerstandsfähigeren und effizienteren Systemarchitekturen.

Action Items

Bewerten Sie frühzeitig, ob das objektorientierte Modell (z.B. DDD) oder das relationale Modell als "führend" für Ihr Projekt gelten soll, basierend auf Geschäftslogik, Query-Komplexität und Performanceanforderungen.

Impact: Diese strategische Entscheidung hilft, Architekturentscheidungen zu leiten und den passendsten Kompromiss zwischen Abstraktion und Effizienz zu finden.

Setzen Sie eine strikte Trennung von Datenbankschemata pro Anwendung oder Bounded Context durch, um die Entkopplung und Änderbarkeit Ihrer Systeme zu gewährleisten.

Impact: Dies führt zu modulareren Systemen, die unabhängig voneinander entwickelt und weiterentwickelt werden können, was die Agilität erhöht.

Für Performance-kritische Abfragen in DDD-Kontexten sollten ORM-eigene Abfragesprachen (z.B. JPQL) oder sogar Transaction Scripts mit Data Gateways in Betracht gezogen werden, um die Datenbankoptimierung voll zu nutzen.

Impact: Dies optimiert die Systemleistung bei datenintensiven Operationen, ohne das gesamte objektorientierte Modell aufgeben zu müssen.

Bei der Nutzung von Dokumentendatenbanken ist eine präzise Vorab-Modellierung der Dokumentstruktur entscheidend, da die nachträgliche Änderung komplex und Flexibilität bei Ad-hoc-Abfragen eingeschränkt ist.

Impact: Eine durchdachte Modellierung verhindert zukünftige Performance-Engpässe und die Notwendigkeit kostspieliger Umstrukturierungen.

Wählen Sie für Anwendungsfälle mit minimaler Geschäftslogik (z.B. reine Datenverschiebung oder einfache CRUD-Operationen) bewusst einfachere Persistenz-Patterns wie Transaction Script oder Row Data Gateway.

Impact: Dies reduziert die Komplexität der Implementierung und Wartung, da keine überflüssigen Abstraktionsschichten für nicht vorhandene Domain-Logik geschaffen werden müssen.

Tags

Keywords

Software-Architektur Datenbankmodellierung Domain Driven Design Relationale Datenbanken NoSQL Datenbanken ORM JPA Active Record Transaction Script Data Gateway Systemarchitektur