© rossphoto/Shutterstock.com
Daten schemafrei mit Hibernate in PostgreSQL speichern

Schnell und flexibel …


Dieser Artikel zeigt, wie Daten schemafrei mit dem relationalen Datenbanksystem PostgreSQL abgespeichert und effizient abgefragt werden können. Darüber hinaus wird aufgezeigt, wie eine Integration in JPA respektive Hibernate gelingt.

Fast jede Anwendung hat die Anforderung, Daten dauerhaft zu speichern und performant abzufragen. Für diesen Zweck wurden Datenbanken entwickelt. Neben den relationalen Datenbanken mit der Abfragesprache SQL als Platzhirsch haben sich mittlerweile weitere, sogenannte NoSQL-Datenbanken (z. B. Document Stores, Key-Value Stores, Graphdatenbanken) etabliert.

Relationale Datenbanken speichern Daten üblicherweise in festen Schemata, wohingegen Document Stores hier flexibler sind. Es kommt in Anwendungen häufig vor, dass ein Großteil der zu speichernden Daten einem festen Schema folgt, aber zumindest bei einem Teil der Daten die Struktur variiert.

Eine viel bemühte Beispielanwendung

Als leicht verständliches Beispiel soll an dieser Stelle die Produkttabelle eines E-Commerce-Systems bemüht werden. Jedes Produkt in dieser Tabelle hat immer eine Artikelnummer, hier als SKU (Stock Keeping Unit) bezeichnet, einen Namen und einen Preis. Es gibt allerdings Attribute, die nur für spezielle Produktkategorien interessant sind: Zum Beispiel spielen bei einem Toaster die Farbe und das Gewicht eine Rolle. Für digitale Güter, die im gleichen Shop verkauft werden, sind diese Eigenschaften allerdings völlig uninteressant. Ein Produkt könnte also wie in Listing 1 in JSON modelliert sein.

Listing 1: Modellierung von Produktdaten

{ "name": "Brown Toast 4000", "sku": "A-12345678", "price": { "currency": "EUR", "value": 20.00 }, "attributes": { "colors": ["green", "black"], "weight": { "unit": "g", "value": 1250 }, "measures": { "unit": "mm", "height": 250, "width": 400, "depth": 250 } } }

Die Felder name, sku und price sind definitiv für jedes Produkt vorhanden. Die Objekte unter dem Schlüssel attributes können für jedes Produkt verschieden sein.

Es ist nicht sinnvoll, in einem relationalen Datenbankschema alle möglichen Produktattribute vorauszuahnen und jedem jeweils eine eigene Spalte in der Produkttabelle zu spendieren. Alternativ könnte zur Produkttabelle eine weitere Tabelle gepflegt werden, in der jeweils in einer eigenen Zeile ein Produktattribut zu einem Produkt gespeichert wird. Die Beziehung zwischen Produktattributtabelle und Produkttabelle würde dann durch einen Fremdschlüssel hergestellt. Beim Abrufen eines einzelnen Produkts müssten a...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang