İçeriğe geç

JSONB Alanı

JSONB alanı (arayüzde jsonb olarak etiketlenmiştir), Nesneler {...} veya Diziler [...] gibi yapılandırılmamış veya yarı yapılandırılmış veri kümelerini depolamak için kullanılır.

Standart bir Metin alanının aksine, bu alan JSONB (Binary JSON) formatını kullanır. Bu, veritabanının kaydetmeden önce girdinin geçerli JSON olup olmadığını doğruladığı ve verileri, yapı içindeki belirli anahtarların verimli bir şekilde indekslenmesine ve sorgulanmasına izin veren ayrıştırılmış bir ikili formatta sakladığı anlamına gelir.

Sağ kenar çubuğunda bir JSON alanını yapılandırırken aşağıdaki ayarlar mevcuttur:

  • Name: Alan için benzersiz sistem tanımlayıcısı (örneğin, metadata, settings, api_response).
  • Default Value: Veri sağlanmazsa atanacak geçerli bir JSON nesnesi veya dizisi (örneğin, {"theme": "dark"} veya []).
  • Description: JSON verilerinin şemasını veya amacını açıklamak için isteğe bağlı bir metin kutusu.
  • Mandatory: Etkinleştirilirse, geçerli JSON verileri sağlanmadıkça kayıt kaydedilemez.
  • Unique: Etkinleştirilirse, aynı tam JSON yapısına ve içeriğine sahip iki kayıt olmadığından emin olur.
    • Not: Bu, tam ikili eşitliği zorunlu kılar, yani veritabanı normalleştirmesine bağlı olarak {"a": 1, "b": 2} muhtemelen {"b": 2, "a": 1} ile eşit, ancak {"a": 1}den farklı kabul edilir.

İpucu: Neden JSONB? Standart JSON yerine JSONB veri türünü kullanıyoruz. Yazması biraz daha yavaş olsa da, JSONB sorgulaması önemli ölçüde daha hızlıdır. İndekslemeyi (GIN) destekler, bu da doğrudan JSON nesnesi içindeki anahtarlar ve değerler üzerinde yüksek performanslı aramalar ve filtrelemeler gerçekleştirmenize olanak tanır (örneğin, attributes->'color' öğesinin “mavi” olduğu tüm kullanıcıları bulma).

  • Yapılandırma/Tercihler: Yeni veritabanı sütunları gerektirmeden sık sık değişebilen kullanıcı tercihlerini saklama (örneğin, {"notifications": true, "theme": "dark"}).
  • Harici API Verileri: Üçüncü taraf entegrasyonlarından gelen ham yanıtları saklama (örneğin, Stripe webhook’ları veya günlük yükleri).
  • Dinamik Nitelikler: Kategoriler arasında büyük farklılık gösteren ürün ayrıntıları (örneğin, bir Tişörtün beden ve renk özellikleri varken bir Dizüstü Bilgisayarın ram ve cpu özellikleri vardır).
  • Listeler: Basit dize veya sayı dizilerini saklama (örneğin, ["etiket1", "etiket2", "etiket3"]).