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.
Właściwości Konfiguracji
Dział zatytułowany „Właściwości Konfiguracji”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}.
- Uwaga: Wymusza to dokładną równość binarną, co oznacza, że
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”).
Typowe Przypadki Użycia
Dział zatytułowany „Typowe Przypadki Użycia”- 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
rozmiarikolor, ale laptop mapamięć RAMiprocesor). - Listy: Przechowywanie prostych tablic ciągów znaków lub liczb (np.
["tag1", "tag2", "tag3"]).