Sempervivum
Erfahrenes Mitglied
Aus gegebenem Anlass möchte ich mal ein Verfahren im Bereich der Datenbanken zur Diskussion stellen, das relativ neu ist, wenig angewendet wird und über eine geringe Akzeptanz verfügt: Das Speichern von Datenstrukturen in einer Spalte einer Tabelle in Form eines JSON-kodierten Strings.
Relationale Datenbanken sind weit verbreitet und gut eingeführt. Sie haben jedoch eine gravierende Beschränkung: Die Struktur der Daten ist auf zwei Dimensionen beschränkt. Häufig ist es jedoch erforderlich, eine dritte Dimension hinein zu bringen, wenn eine Anzahl von gleichartigen Elementen in einem Datensatz gespeichert werden soll. Unerfahrene lösen das häufig, indem getrennte Felder mit einer Nummer als Suffix angelegt werden: element1, element2, element3, usw. Die Nachteile liegen auf der Hand:
Entweder man verschwendet Elemente, wenn man sehr viele anlegt.
Oder die, die man mal angelegt hat, reichen irgend wann nicht mehr aus.
Außerdem ist es nicht möglich, z. B. über die Elemente zu iterieren oder auf ein Element mit dem Index in einer Variablen zuzugreifen.
Die eingeführte Lösung besteht darin, dass man eine weitere unabhängige Tabelle mit diesen Elementen einführt. Hat den Vorteil, dass man auf die Elemente mit einem einfachen Select zugreifen kann, die Anzahl ermitteln, darüber iterieren etc. Jedoch den Nachteil, dass die Zugriffe komplizierter werden, wenn Verknüpfungen zwischen den Tabellen erforderlich sind, es sind Joins oder Subqueries erforderlich. Ebenso die Pflege: Will man von Hand die Elemente ermitteln, die zusammen gehören, wird es ebenfalls kompliziert. Objektiv betrachtet, muss man diese Lösung als Workaround betrachten, um die Beschränkung der Datenbank auf zwei Dimensionen zu umgehen.
Durch das Einführen der JSON-Kodierung von Arrays und komplexeren Strukturen ist jetzt eine elegante und einfache Lösung verfügbar. Diese können problemlos in einem Datensatz untergebracht werden ohne die Probleme, die man früher hatte. Mindestens MySQL und MariaDB unterstützen das ausdrücklich indem sie einen Datentyp JSON bereit stellen. Sollte das nicht der Fall sein, genügt ein Feld vom Datentyp String um die JSON-kodierte Struktur zu speichern.
MySQL :: MySQL 8.4 Reference Manual :: 13.5 The JSON Data Type
JSON Data Type
Es bleibt zu hoffen, dass diese fortschrittliche und elegante Methode in Zukunft größere Anwendung und Akzeptanz findet.
Beste Grüße
Ulrich
Relationale Datenbanken sind weit verbreitet und gut eingeführt. Sie haben jedoch eine gravierende Beschränkung: Die Struktur der Daten ist auf zwei Dimensionen beschränkt. Häufig ist es jedoch erforderlich, eine dritte Dimension hinein zu bringen, wenn eine Anzahl von gleichartigen Elementen in einem Datensatz gespeichert werden soll. Unerfahrene lösen das häufig, indem getrennte Felder mit einer Nummer als Suffix angelegt werden: element1, element2, element3, usw. Die Nachteile liegen auf der Hand:
Entweder man verschwendet Elemente, wenn man sehr viele anlegt.
Oder die, die man mal angelegt hat, reichen irgend wann nicht mehr aus.
Außerdem ist es nicht möglich, z. B. über die Elemente zu iterieren oder auf ein Element mit dem Index in einer Variablen zuzugreifen.
Die eingeführte Lösung besteht darin, dass man eine weitere unabhängige Tabelle mit diesen Elementen einführt. Hat den Vorteil, dass man auf die Elemente mit einem einfachen Select zugreifen kann, die Anzahl ermitteln, darüber iterieren etc. Jedoch den Nachteil, dass die Zugriffe komplizierter werden, wenn Verknüpfungen zwischen den Tabellen erforderlich sind, es sind Joins oder Subqueries erforderlich. Ebenso die Pflege: Will man von Hand die Elemente ermitteln, die zusammen gehören, wird es ebenfalls kompliziert. Objektiv betrachtet, muss man diese Lösung als Workaround betrachten, um die Beschränkung der Datenbank auf zwei Dimensionen zu umgehen.
Durch das Einführen der JSON-Kodierung von Arrays und komplexeren Strukturen ist jetzt eine elegante und einfache Lösung verfügbar. Diese können problemlos in einem Datensatz untergebracht werden ohne die Probleme, die man früher hatte. Mindestens MySQL und MariaDB unterstützen das ausdrücklich indem sie einen Datentyp JSON bereit stellen. Sollte das nicht der Fall sein, genügt ein Feld vom Datentyp String um die JSON-kodierte Struktur zu speichern.
MySQL :: MySQL 8.4 Reference Manual :: 13.5 The JSON Data Type
JSON Data Type
Es bleibt zu hoffen, dass diese fortschrittliche und elegante Methode in Zukunft größere Anwendung und Akzeptanz findet.
Beste Grüße
Ulrich