Przejdź do głównej zawartości

Pole JSONB

Pole JSONB (oznaczone jako jsonb w interfejsie) służy do przechowywania niestrukturalnych lub częściowo ustrukturalnych zestawów danych, takich jak Obiekty {...} lub Tablice [...].

W przeciwieństwie do standardowego pola tekstowego, to pole używa formatu JSONB (Binary JSON). Oznacza to, że baza danych weryfikuje, czy dane wejściowe są prawidłowym JSON przed zapisaniem, i przechowuje dane w rozłożonym formacie binarnym, który umożliwia wydajne indeksowanie i wyszukiwanie określonych kluczy w strukturze.

Podczas konfigurowania pola JSON na prawym pasku bocznym dostępne są następujące ustawienia:

  • Name: Unikalny identyfikator systemowy dla pola (np. metadata, settings, api_response).
  • Default Value: Prawidłowy obiekt JSON lub tablica do przypisania, jeśli nie zostaną podane żadne dane (np. {"theme": "dark"} lub []).
  • Description: Opcjonalne pole tekstowe do opisania schematu lub celu danych JSON.
  • Mandatory: Jeśli włączone, rekord nie może zostać zapisany, chyba że podane zostaną prawidłowe dane JSON.
  • Unique: Jeśli włączone, zapewnia, że nie istnieją dwa rekordy o tej samej strukturze i zawartości JSON.
    • Uwaga: Wymusza to dokładną równość binarną, co oznacza, że {"a": 1, "b": 2} prawdopodobnie zostałoby uznane za równe {"b": 2, "a": 1} w zależności od normalizacji bazy danych, ale różne od {"a": 1}.

Wskazówka: Dlaczego JSONB? Używamy typu danych JSONB zamiast standardowego JSON. Chociaż jest nieco wolniejszy w zapisie, JSONB jest znacznie szybszy w zapytaniach. Obsługuje indeksowanie (GIN), co pozwala wykonywać wydajne wyszukiwania i filtrowanie bezpośrednio na kluczach i wartościach wewnątrz obiektu JSON (np. znajdź wszystkich użytkowników, u których attributes->'color' to “niebieski”).

  • Konfiguracja/Preferencje: Przechowywanie preferencji użytkownika, które mogą często się zmieniać bez konieczności tworzenia nowych kolumn bazy danych (np. {"notifications": true, "theme": "dark"}).
  • Zewnętrzne Dane API: Przechowywanie surowych odpowiedzi z integracji stron trzecich (np. webhooki Stripe lub ładunki dziennika).
  • Dynamiczne Atrybuty: Szczegóły produktu, które znacznie różnią się w zależności od kategorii (np. koszulka ma rozmiar i kolor, ale laptop ma pamięć RAM i procesor).
  • Listy: Przechowywanie prostych tablic ciągów znaków lub liczb (np. ["tag1", "tag2", "tag3"]).