Veri tabanı kavramıyla ilk karşılaştığım zamanı hatırlıyorum: bir arkadaşımın küçük işletmesi için basit bir müşteri listesi tutmam gerekiyordu. Excel dosyasıyla başladım, birkaç ay sonra dosya şişti, iki kişi aynı anda düzenlemeye çalışınca kayıtlar birbirine karıştı ve sonunda "acaba bunun doğru yolu ne?" diye sormaya başladım. İşte o soru beni veri tabanlarına götürdü. Şimdi geriye dönüp baktığımda, veri tabanı nedir sorusunun cevabını en baştan öğrenmiş olsaydım aylarca uğraşmaktan kurtulacağımı görüyorum. Bu yüzden burada teknik terimlere boğulmadan, kendi öğrenme sürecimde işime yarayan şeyleri anlatmak istiyorum.
En yalın tanımıyla veri tabanı, bilgilerin düzenli bir şekilde saklandığı ve istendiğinde hızlıca geri getirilebildiği bir sistemdir. Buradaki kritik kelime "düzenli". Bir klasöre yüzlerce not atmakla, o notları etiketleyip tarihe göre sıralamak arasındaki fark neyse, dosya yığınıyla veri tabanı arasındaki fark da odur.
Bana en çok yardımcı olan benzetme kütüphane oldu. Bir kütüphanede kitaplar rastgele durmaz; raflar, konu başlıkları ve bir katalog sistemi vardır. Kataloğa bakıp "şu yazarın şu kitabı" dediğinizde saniyeler içinde yerini bulursunuz. Veri tabanı da tam olarak bu katalog mantığıyla çalışır. Kayıtları saklar, ama daha önemlisi onları bulmanızı sağlar.
Bir de şu ayrımı erken öğrenmek iyi olur: veri tabanı verinin kendisidir, veri tabanı yönetim sistemi ise o veriyi yöneten yazılımdır. MySQL, PostgreSQL, SQLite gibi isimleri duyduğunuzda bunlar yönetim sistemleridir; veriyi tutan sandığın kapağını açıp kapatan mekanizma gibi düşünün.
İlişkisel veri tabanları dediğimiz en yaygın tür, aslında birbirine bağlı tablolardan oluşur. Tablo mantığını kavradığım an gerisi çok kolaylaştı. Küçük bir örnek vereyim:
| müşteri_no | ad | şehir | kayıt_tarihi |
|---|---|---|---|
| 1 | Ayşe | İzmir | 2023-04-11 |
| 2 | Mehmet | Ankara | 2023-04-15 |
| 3 | Zeynep | İzmir | 2023-05-02 |
Burada her sütun bir bilgi türünü, her satır ise tek bir kaydı temsil eder. "müşteri_no" ise bu tabloda benzersiz kimliktir; yani iki farklı Mehmet olsa bile onları birbirinden ayırmanızı sağlar. Buna birincil anahtar deniyor ve gerçekten hayat kurtarıyor.
Asıl güç, tabloları birbirine bağladığınızda ortaya çıkıyor. Ayrı bir "siparişler" tablosu tutup içinde sadece müşteri_no yazarsanız, müşteri bilgilerini her siparişte tekrar tekrar yazmanız gerekmez. Adres değişince tek bir yerden güncellersiniz, tüm siparişler otomatik olarak doğru bilgiyi gösterir. Ben bunu anlayana kadar aynı bilgiyi üç ayrı yerde tutuyordum ve tahmin edeceğiniz gibi hep biri güncel kalıyordu.
Bu son madde özellikle önemli. Dosyalarınızı düzenli yedeklemenin yollarını anlattığım yazıdaki mantık burada da geçerli: veri tabanı ne kadar düzenli olsa da yedeği yoksa bir donanım arızasında her şey gider.
Farkında olmasanız da günde onlarca veri tabanıyla etkileşime giriyorsunuz. Telefonunuzdaki rehber uygulaması bir veri tabanıdır. WhatsApp'ta mesaj geçmişinizde arama yaptığınızda arka planda bir sorgu çalışır. Gmail hesabınızda "şu kişiden gelen ekli mesajlar" filtresi kurduğunuzda yine aynı mantık devrededir.
Bankacılık uygulamasında hesap hareketlerini görmek, bir e-ticaret sitesinde ürünleri fiyata göre sıralamak, YouTube'un size video önermesi, bir arama motorunun sonuç listesi çıkarması… Hepsinin temelinde düzenli saklanmış ve indekslenmiş veri var. Hatta bilgisayarınızın yavaşlama nedenlerini araştırdığınızda karşınıza çıkan sistem günlükleri bile bir tür kayıt yapısıdır.
Kendi deneyimimden çıkardığım sıra şöyle oldu ve yeni başlayan birine de bunu öneririm:
İlk veri tabanımı kurarken en büyük hatam, en baştan "profesyonel" bir yapı kurmaya çalışmaktı. Üç tabloyla başlayıp ihtiyaç doğdukça büyütmek çok daha sağlıklı bir yol.
Veri tabanı mantığını