Schemaflexibilität bei gleichzeitiger Datenintegrität
Die hybride Datenmodellierung – bei der sowohl strukturierte als auch semistrukturierte Daten zum Einsatz kommen – kann die Flexibilitätsanforderungen moderner Web-, Mobil- und IoT-Anwendungen erfüllen, ohne dabei Abstriche bei ACID-Transaktionen oder Standard-SQL machen zu müssen.
JSON + Relational: Verwendung hybrider Datenmodelle
Erfahren Sie, wie Sie strukturierte und halbstrukturierte Daten modellieren, JSON-Dokumente mit SQL indizieren und abfragen sowie die Datenintegrität von JSON-Dokumenten sicherstellen.
Jetzt ansehenDie 5 wichtigsten Gründe für den Einsatz von Relational + JSON
Mithilfe von Transaktionen können Sie mehrere JSON-Dokumente einfügen bzw. ändern.
Sie können Integritätsbeschränkungen auf bestimmte Felder innerhalb von JSON-Dokumenten anwenden.
Sie können JSON-Dokumente mit Standard-SQL-Funktionen abfragen und JOIN -Daten mit bestehenden Tabellen JOIN .
Sie können bestimmte Felder innerhalb von JSON-Dokumenten indizieren.
Sie können JSON-Dokumente als relationale Daten zurückgeben und umgekehrt.
Abfragen in hybriden Datenmodellen
Was ist, wenn Sie Benutzerprofile in einer einzigen Zeile speichern möchten? Ja, ein Benutzer hat eine Benutzer-ID, einen Namen und ein Land (und mehr). Allerdings können Benutzer sowohl private als auch berufliche E-Mail-Adressen sowie Mobil- und Bürotelefonnummern haben. Während einige Benutzer Twitter- und LinkedIn-Konten haben, verfügen andere möglicherweise über Facebook- und Instagram-Konten. Wie sieht es mit Interessen aus?
Mit JSON -Funktionen können Sie Benutzerprofile in einer einzigen Zeile speichern.
| user_id | Name | Land | attr |
|---|---|---|---|
| sjohnson | Shane | USA | { "email": { "work": "shane.johnson@mariadb.com"}, "phone": { "mobile": "(555) 555-5555"}, "social": { "twitter": "@shane_dev", "linkedin": "/in/shanekjohnson"}, "interests": [ "Science Fiction", "Distributed Systems"] |
SELECT , JSON_VALUE(attr, "$.email.personal") AS email, JSON_VALUE(attr, "$.social.twitter") AS twitter, JSON_VALUE(attr, "$.interests[0]") AS favorite_interest FROM WHERE = "sjohnson";
| Name | Lieblingsinteresse | ||
|---|---|---|---|
| Shane | keine | @shane_dev | Science-Fiction |