Ga naar inhoud

JSONB-veld

Het JSONB veld (gelabeld als jsonb in de interface) wordt gebruikt om ongestructureerde of semi-gestructureerde datasets op te slaan, zoals Objecten {...} of Arrays [...].

In tegenstelling tot een standaard tekstveld gebruikt dit veld het JSONB (Binair JSON) formaat. Dit betekent dat de database controleert of de invoer geldige JSON is voordat deze wordt opgeslagen, en de gegevens opslaat in een ontleed binair formaat dat efficiënte indexering en bevraging van specifieke sleutels binnen de structuur mogelijk maakt.

Bij het configureren van een JSON-veld in de rechterzijbalk zijn de volgende instellingen beschikbaar:

  • Name: De unieke systeem-ID voor het veld (bijv. metadata, settings, api_response).
  • Default Value: Een geldig JSON-object of array om toe te wijzen als er geen gegevens worden verstrekt (bijv. {"theme": "dark"} of []).
  • Description: Een optioneel tekstvak om het schema of het doel van de JSON-gegevens te beschrijven.
  • Mandatory: Indien ingeschakeld, kan het record niet worden opgeslagen tenzij geldige JSON-gegevens worden verstrekt.
  • Unique: Indien ingeschakeld, zorgt dit ervoor dat er geen twee records zijn met dezelfde exacte JSON-structuur en inhoud.
    • Opmerking: Dit dwingt exacte binaire gelijkheid af, wat betekent dat {"a": 1, "b": 2} waarschijnlijk als gelijk zou worden beschouwd aan {"b": 2, "a": 1} afhankelijk van databasenormalisatie, maar verschillend van {"a": 1}.

Tip: Waarom JSONB? We gebruiken het JSONB gegevenstype in plaats van standaard JSON. Hoewel iets langzamer om te schrijven, is JSONB aanzienlijk sneller om te bevragen. Het ondersteunt indexering (GIN), waarmee je hoogwaardige zoekopdrachten en filtering rechtstreeks op sleutels en waarden binnen het JSON-object kunt uitvoeren (bijv. alle gebruikers vinden waarbij attributes->'color' “blauw” is).

  • Configuratie/Voorkeuren: Opslaan van gebruikersvoorkeuren die vaak kunnen veranderen zonder nieuwe databasekolommen te vereisen (bijv. {"notifications": true, "theme": "dark"}).
  • Externe API-gegevens: Opslaan van onbewerkte antwoorden van integraties van derden (bijv. Stripe-webhooks of logging-payloads).
  • Dynamische Attributen: Productdetails die sterk variëren tussen categorieën (bijv. een T-shirt heeft maat en kleur, maar een laptop heeft ram en cpu).
  • Lijsten: Opslaan van eenvoudige arrays van tekenreeksen of getallen (bijv. ["tag1", "tag2", "tag3"]).