Decision Record · ADR-003

PostgreSQL içinde JSONB yerine nor­ma­lize tablolar

Çekirdek varlıklar constraint'ler ve foreign key'lerle normalize biçimde modellenir. JSONB, gerçekten şemasız veya nadiren sorgulanan çevresel veriler için hedefli olarak kullanılır.

Bu nedir? · Karar kaydı (ADR)

ADR formatında belgelenmiş bir mimari karar — bağlam, değerlendirilen seçenekler, gerekçe ve sonuçlar. Genel bir rehber değil, somut bir karar. Genel bakışa git

Durum
Kabul edildi
Kimlik
ADR-003
Gözden geçirme
Sorgu desenlerinde veya veri hacminde önemli değişiklikler olduğunda yeniden değerlendirilmelidir.

Bağlam

PostgreSQL, JSONB ile esnek ve şemasız depolama sunar. Yapılandırılmış veriler için şu soru ortaya çıkar: normalize tablolar mı, JSONB sütunları mı?

Sorun

JSONB cazip biçimde esnektir, ancak yapıyı ve bütünlüğü veritabanından uygulama koduna taşır. Normalize tablolar yapıyı zorunlu kılar, ancak sık şema değişikliklerinde daha az esnektir.

Seçenekler

Neleri değer­len­dir­dik?

  1. A

    Normalize tablolar

    Yapı, constraint'ler ve indeksler veritabanında; net ilişkiler.

  2. B

    JSONB sütunları

    Esnek ve şemasız — bütünlük kodda yer alır.

  3. C

    Karma

    Çekirdek varlıklar için normalize, gerçek çevresel veriler için JSONB.

Karar

Neye karar verdik?

Çekirdek varlıklar constraint'ler ve foreign key'lerle normalize biçimde modellenir. JSONB, gerçekten şemasız veya nadiren sorgulanan çevresel veriler için hedefli olarak kullanılır.

Bu kararın gerekçesi

Veri bütünlüğü dağınık uygulama mantığına değil, veritabanına aittir. Normalize yapılar sorgulanabilir, indekslenebilir ve kendi kendini belgeler. JSONB, yapının gerçekten değişken olduğu yerlerde doğru tercihtir — modellemeyi atlamanın kestirme yolu olarak değil.

Sonuçlar

  • Çekirdek varlıklardaki şema değişiklikleri migration gerektirir — bilinçli, sürümlenmiş ve izlenebilir.
  • Sık sorgulanan JSONB alanları hedefli indekslere (GIN) ve belgelenmiş bir beklenen yapıya ihtiyaç duyar.
  • Çekirdek ve çevresel veriler arasındaki sınır, gerekçelendirilen bir tasarım kararıdır.

Elenen alternatifler

  • Varsayılan olarak JSONBBütünlüğü koda taşır, sorguları ve migration'ları zorlaştırır.
  • Her ne pahasına olursa olsun normalizasyonVerilerin gerçekten şemasız olduğu yerlerde bile yapı dayatır.
Bilgi grafiği

Mühen­dis­lik yol­cu­lu­ğu­nuza devam edin.

İlgili kavramlar, kararlar, uygulama kılavuzları ve bakış açıları — bir bağlantı listesi olarak değil, bütünlüklü bir yol olarak.

Benzer bir kararın eşiğinde misiniz?

Bu kararları içgüdüyle vermiyoruz. Yönetimimizle görüşün: teknik düzeyde, satış konuşması olmadan.