---
title: 'İlişkisel ve İlişkisel Olmayan Seçimi'
source: 'https://academia.sh/tr/kurslar/iliskisel-kuram/iliskisel-ve-iliskisel-olmayan-secimi'
course: 'Veri Modelleme ve İlişkisel Kuram'
language: tr
updated: '2026-08-17T18:08:59+00:00'
license: 'CC BY-SA 4.0'
---

# İlişkisel ve İlişkisel Olmayan Seçimi

İlişkisel olmayan veri modeli ailelerinin neyi bırakıp neyi verdiği, belge saklamanın ölçülen ödünleşimi, şema esnekliği yanılgısı ve seçimin karar ölçütleri.

Önceki ders ilişkisel veritabanının verdiği sözleri adlandırdı. Aynı adlandırma bir
karşılaştırmayı mümkün kılar: bu sözlerin bir bölümünden vazgeçen sistemler vardır ve
karşılığında başka şeyler sunarlar. Bu dersin sorusu şudur: hangi veri ve hangi erişim
biçimi ilişkisel modeli gerektirir, hangi durumda başka bir veri modeli daha uygundur, ve
bu karar hangi ölçütlerle verilir?

## Vazgeçilen Nedir

İlişkisel model dört şey verir: veriden bağımsız bildirimsel sorgu, şemada uygulanan
kısıtlar, keyfî birleştirme, ve işlem güvenceleri. İlişkisel olmayan sistemler bunların
bir bölümünü bırakır. Bırakma nedeni genellikle üçünden biridir: veriyi birden çok
makineye dağıtmak, tek bir erişim biçimini çok ucuza indirmek, ya da şemanın önceden
bilinmediği bir alanı karşılamak.

Karar bu yüzden "hangisi daha iyi" sorusu değildir. Soru şudur: bu iş, bırakılan
güvencelerden hangisine ihtiyaç duyuyor?

## Veri Modeli Aileleri

**Anahtar–değer deposu** (key-value store) tek bir erişim biçimini destekler: anahtarla
getir, anahtarla yaz. Değerin içi sistem için anlamsızdır, dolayısıyla içine göre sorgu
yapılamaz. Oturum durumu ve önbellek gibi işlerde yerindedir.

**Belge deposu** (document store) değeri yapılandırılmış bir belge olarak tutar ve
içindeki alanlara göre sorguya izin verir. Doğal birimi **birleşik kayıttır** (aggregate):
birlikte okunan ve birlikte yazılan veri tek belgede durur.

**Sütun ailesi deposu** (wide-column store) satırları anahtara göre bölümler ve her satırda
seyrek, çok sayıda sütun tutar. Çok büyük yazma hacimlerini dağıtmaya yönelir.

**Çizge veritabanı** (graph database) düğüm ve kenarları birinci sınıf nesne yapar. Uzun
yollar boyunca dolaşmayı — "bu üyenin ödünç aldığı kitapları alan üyelerin başka ne aldığı"
gibi — ilişkisel birleştirme zincirinden ucuza getirir.

**Arama dizini** (search index) metni sözcüklerine ayırıp ters dizin kurar; alaka sırasına
göre sonuç döndürür. Kataloğun serbest metin araması buna örnektir.

**Zaman serisi deposu** (time series store) zaman damgalı ölçümleri sıkıştırarak saklar ve
aralık sorgularına göre düzenlenir.

Bu aileler birbirini dışlamaz; birçok ilişkisel motor belge, metin arama ve çizge
sorgulamayı kendi içinde sunar. **Hangi yeteneğin hangi motorda bulunduğu değişir**, ve bu
yüzden karar ürün adıyla değil gereksinimle verilir.

## Belge Saklamanın Ödünleşimi

Belge yaklaşımının kazancı ve bedeli aynı yerden gelir: veri, tek bir okuma biçimine göre
bir araya getirilmiştir.

```sh
sqlite3 :memory: <<'SQL'
.headers on
.mode box
.nullvalue (bos)
CREATE TABLE uye_belge (uye_no INTEGER PRIMARY KEY, belge TEXT NOT NULL);
INSERT INTO uye_belge VALUES
 (41, '{"ad":"Ayse Demir","odunc":[{"isbn":"975-01"},{"isbn":"975-02"}]}'),
 (52, '{"ad":"Mert Kaya","odunc":[{"isbn":"975-01"}]}'),
 (63, '{"odunc":[]}');

SELECT uye_no, belge ->> '$.ad' AS ad,
       json_array_length(belge, '$.odunc') AS odunc_sayisi
FROM uye_belge ORDER BY uye_no;

SELECT o.value ->> '$.isbn' AS isbn, COUNT(*) AS kez
FROM uye_belge u, json_each(u.belge, '$.odunc') o
GROUP BY isbn ORDER BY isbn;
SQL
```

```
┌────────┬────────────┬──────────────┐
│ uye_no │     ad     │ odunc_sayisi │
├────────┼────────────┼──────────────┤
│ 41     │ Ayse Demir │ 2            │
│ 52     │ Mert Kaya  │ 1            │
│ 63     │ (bos)      │ 0            │
└────────┴────────────┴──────────────┘
┌────────┬─────┐
│  isbn  │ kez │
├────────┼─────┤
│ 975-01 │ 2   │
│ 975-02 │ 1   │
└────────┴─────┘
```

Belge alanlarına erişen işleçlerin adı ve yazılışı **motora göre değişir**; burada
gösterilen davranış her yerde aynıdır.

Üç sonuç okunabilir. Birincisi kazanç: bir üyenin adı ve ödünç listesi tek satırdan gelir,
hiçbir birleştirme yoktur. İkincisi bedel: "hangi kitap kaç kez alındı" sorusu bütün
belgeleri açmayı ve içlerindeki dizileri düzleştirmeyi gerektirir. Belge sınırının dışına
çıkan her soru pahalıdır. Üçüncüsü kayıp: `63` numaralı üyenin belgesinde `ad` alanı hiç
yoktur ve bu ekleme hatasız geçmiştir. `NOT NULL` yazılabilecek bir yer bulunmadığı için
kural, belgeyi yazan her programa geri dönmüştür.

## Şema Esnekliği Yanılgısı

Belge yaklaşımının en sık dile getirilen üstünlüğü şema esnekliğidir: yeni bir alan eklemek
şema değişikliği gerektirmez. Bu doğrudur, ama eksik ifade edilmiştir.

Şema ortadan kalkmaz; yer değiştirir. **Yazma anında şemada** (schema-on-write) yapı
veritabanında tanımlıdır ve her yazma ona uymak zorundadır. **Okuma anında şemada**
(schema-on-read) yapı, belgeyi okuyan kodun beklentisinde durur. Alanın adı değiştiğinde
ya da tipi farklılaştığında sorun kaybolmaz; yazma anında bir hata olarak görünmek yerine,
okuma anında bir davranış farkı olarak ortaya çıkar. Üstelik depoda artık her iki biçimden
belgeler vardır ve okuyan kodun ikisini de karşılaması gerekir.

Ölçüt şudur: yapı gerçekten öngörülemez ve üzerinde kısıt aranmıyorsa esneklik kazançtır.
Yapı bilinebiliyorsa, onu şemaya yazmamak yalnızca doğrulamayı ertelemektir.

## Ölçek ve Dağıtım

Veriyi birden çok makineye dağıtmak — **veri bölümleme** (partitioning) — ilişkisel
modelin iki yeteneğini zorlar. Birleştirme, parçaları farklı makinelerde duran iki bağıntı
arasında ağ üzerinden yapılır. İşlem güvenceleri, birden çok makineyi kapsadığında ek
eşgüdüm ve gecikme gerektirir.

İlişkisel olmayan sistemlerin bir bölümü bu iki yeteneği baştan sınırlayarak dağıtımı
ucuzlatır: birleştirme sunulmaz, işlem tek bir birleşik kayıtla sınırlanır, ve okumanın
en son yazmayı görmesi güvence altına alınmaz — buna **sonunda tutarlılık** (eventual
consistency) denir.

Burada dikkat edilecek nokta sıralamadır. Dağıtım, veri tek makineye sığmadığında ya da
tek makinenin dayanabileceğinden çok istek geldiğinde gerekir. Bu eşiğe ulaşmadan
dağıtımın maliyetini üstlenmek, hiçbir karşılığı olmayan bir kayıptır.

## Karar Ölçütleri

Beş soru, kararın çoğunu belirler.

- **Veri şekli.** Varlıklar arasında çoka çok ilişkiler var mı, yoksa veri doğal olarak
  bağımsız birleşik kayıtlara ayrılıyor mu? Çoka çok ilişki yoğunsa ilişkisel model
  kazanır.
- **Erişim biçimi.** Sorgular önceden biliniyor ve hep aynı anahtardan mı geliyor, yoksa
  sonradan tanımlanan keyfî sorular mı sorulacak? İkincisi bildirimsel sorgu gerektirir.
- **Kısıt gereksinimi.** Birden çok varlığı kapsayan değişmezler var mı? "Bir nüsha aynı
  anda tek üyede olabilir" kuralı, belge sınırının dışına taşan bir kısıttır.
- **Tutarlılık gereksinimi.** Okumanın en son yazmayı görmesi zorunlu mu? Ödünç verme
  gişesinde zorunludur; katalog önerilerinde değildir.
- **Şema kararlılığı.** Yapı biliniyor ve nadiren mi değişiyor, yoksa alan başına
  öngörülemez mi?

Yanıtlar tek bir sisteme işaret etmeyebilir. **Çoklu depo** (polyglot persistence),
farklı işler için farklı depolar kullanmaktır: kayıtların ilişkisel motorda, serbest metin
aramanın arama dizininde tutulması gibi. Bedeli belirgindir — iki depo arasındaki
tutarlılık artık uygulamanın sorumluluğundadır, ve bu sorumluluk kursun ilk dersindeki
dosya sorununun daha büyük ölçekte geri dönüşüdür. Bu yüzden yaygın sıralama şudur: kayıt
sistemi ilişkisel motorda tutulur, ikincil depolar ondan türetilir.

## Özet

- İlişkisel olmayan sistemler bildirimsel sorgu, şema kısıtları, keyfî birleştirme ve
  işlem güvencelerinden bir bölümünü dağıtım ya da tek bir erişim biçiminin ucuzluğu için
  bırakır.
- Belge saklama, birleşik kayıt içindeki okumayı birleştirmesiz yapar; belge sınırının
  dışına çıkan soru bütün belgeleri açmayı gerektirir.
- Şema esnekliği şemayı ortadan kaldırmaz, onu okuyan koda taşır; doğrulama silinmez,
  ertelenir.
- Dağıtım birleştirmeyi ve işlem güvencelerini pahalılaştırır; eşiğe ulaşmadan üstlenilen
  dağıtım karşılıksız maliyettir.
- Seçim veri şekli, erişim biçimi, kısıt ve tutarlılık gereksinimi ile şema kararlılığı
  üzerinden yapılır; çoklu depo kullanılıyorsa kayıt sistemi tek olmalıdır.

## Kurs Kapanışı

Bu kurs, veriyi dosyada tutmanın sorunlarıyla başladı ve ilişkisel modelin bu sorunlara
verdiği yanıtı adım adım kurdu. Bağıntının küme kuramından gelen tanımı, satır sırasının
neden veriye ait olmadığını ve tablonun bağıntı gibi davranmasının neden şemada
istendiğini açıkladı. Anahtarlar satırı ayırt etme kuralını, bütünlük kısıtları bu kuralın
motor tarafından uygulanmasını verdi. Boş değer, doğru–yanlış ikilisini üçe çıkararak
sorgu yazımının sessiz tuzaklarını açtı. Veri tipleri, bir sütunun ne tutacağının
gösterimden ayrı bir karar olduğunu gösterdi.

İkinci konu tekrarın kaynağını biçimselleştirdi. İşlevsel bağımlılık, anahtar kavramının
genel hâli olarak tanımlandı; normal formlar, sol tarafı anahtar olmayan bağımlılıkları
basamak basamak eledi. Denormalizasyon ters yöndeki kararı ölçüye bağladı, şema tasarım
kalıpları da tekrar eden durumların yerleşik karşılıklarını ve karşı kalıplarını verdi.

Üçüncü konu şemayı iş yüküyle buluşturdu: işlem ile çözümleme yüklerinin zıt gereksinimleri,
ACID güvencelerinin tanımı ve sınırları, ve ilişkisel modelin ne zaman doğru seçim
olduğu.

Kurs boyunca kasıtlı olarak açık bırakılan bir boşluk var. Her derste sorgular yazıldı ama
sorgu dilinin kendisi hiç öğretilmedi; `SELECT` deyiminin bölümleri, koşulların yazılışı,
birleştirme türleri, gruplama ve sıralama — hepsi örnek içinde kullanıldı, kural olarak
tanımlanmadı. Boş değerlerle çalışmanın araçları, ödünç geçmişini özetleyen toplama
işlevleri, veriyi değiştiren deyimlerin ayrıntısı da aynı biçimde bekliyor.

SQL Temelleri kursu bu boşluğu doldurur. Burada kurulan modelin — bağıntıların,
anahtarların, kısıtların ve boş değerin — üzerine, o modeli sorgulayan dili sistemli
biçimde kurar. Kütüphane şeması orada da sürer: bu kursta tasarlanan tablolar, orada
yazılacak her sorgunun konusu olacaktır.
