Enum und set sind ja recht simpel, kann DB intern eine Nummer sein, die
sind teils schon OK / Sinvoll. JSON sind strukturierte Daten, das ist
nur selten sinvoll. Wenn man irgend eine Konfig in der DB ablegt oder
so, ok, dann lohnt sich Normalisierung nicht wirklich. Aber in den
meisten fällen, wenn man wirklich viele Einträge des selben typ hat, wie
meistens wenn man ne Datenbank braucht, ist Normalisierung klar zu
bevorzugen.
So ein JSON Blob in der DB ist weit weniger mächtig, als saubere DB
Tabellen.
Zunächst mal zum Fundamentalen, zu den Daten, die damit abbildbar sind.
JSON ist ein Baum. DB Tabellen bilden ein Graph. Letzteres kann
Rekursionen usw. abbilden, ersteres nicht.
Und dann sind da all die anderen Sachen, die eine saubere DB Struktur
dir gewährleisten kann. Du kannst sicherstellen, dass keine Einträge /
Felder, usw., doppelt sind. Du kannst Constraints erfassen, was für
daten erlaubt sind oder nicht. Du kannst sicherstellen, das
referenzierte Elemente vorhanden sind, nicht gelöscht werden können,
oder beim löschen die Referenz nullen, oder die referenzierenden
Entitäten mitlöschen lassen, je nach Anwendungsfall.
Mit Indexen kann das suchen beschleunigt werden. Und du kannst daten
beliebig Kombinieren und Aggregieren, um direkt in der DB beliebigste
Auswertungen zu machen. Es gibt auch Views, die DB Queries sowas wieder
als Tabellen anzeigen.
Und man sieht auch gleich, was für Felder / Daten es gibt, und was wie
zusammenhängt. Bei Abfragen weiss man dann im vornherein, was man da
bekommt, und erlebt keine Überraschungen.
Und dann hat man noch Transaktionen, um an mehreren Datensätzen
konsistent Änderungen zu machen, was durch all das oben massiv einfacher
wird.
Wenn du die Daten nur in einen JSON Blob packst, gehen so ziemlich all
diese Vorteile flöten.