Veritabanı (Database) Nedir?
Veritabanı, programların onu hızlı ve güvenli şekilde bulabilmesi, ekleyebilmesi, değiştirebilmesi ve silebilmesi için bir bilgisayarda saklanan düzenli bir veri topluluğudur. PostgreSQL, MySQL, SQLite ya da MongoDB gibi veritabanı yönetim sistemi (VTYS, DBMS) denen bir yazılım tarafından yönetilir.
Güncellendi: 24 Eylül 2026
Bir web sitesine giriş yaptığında site hesabını milyonlarca hesap arasından bulmalı, şifreni kontrol etmeli ve ayarlarını yüklemelidir; hepsini birkaç milisaniyede. Bir metin dosyası açıp satır satır okumaz. Bir veritabanına SELECT * FROM users WHERE email = 'ana@example.com' gibi bir istek gönderir ve veritabanı, bir kitabın sonundaki dizin gibi bir index kullanarak doğrudan doğru satıra atlar.
Veritabanı nasıl çalışır
İki parça birlikte çalışır. Veritabanı, sabit bir yapıda düzenlenmiş veridir. Veritabanı yönetim sistemi (VTYS, DBMS) ise bu veriyi dosyalarda saklayan, tutarlı tutan ve istekleri cevaplayan programdır. PostgreSQL, MySQL ve SQLite birer VTYS'dir; müşteri listen ise veritabanıdır.
İlişkisel bir veritabanında veri tablolarda yaşar. Her tablonun sütunları (ad, ülke, puan) ve satırları (her kullanıcı için bir tane) vardır. Bir istek şu adımlardan geçer:
- Programın genellikle SQL (Structured Query Language) ile yazılmış bir sorgu gönderir.
- VTYS sorguyu ayrıştırır ve nasıl cevaplayacağını planlar: hangi tabloları okuyacağını ve bir index'in satırların çoğunu atlayıp atlayamayacağını.
- Veriyi diskten sabit boyutlu sayfalar halinde okur (SQLite'ta varsayılan 4.096 byte, PostgreSQL'de 8 KB) ve sık kullanılan sayfaları bellekte tutar.
- Satırları filtreler, sıralar ve birleştirir, sonra sonucu döndürür.
Python SQLite ile birlikte gelir, bu yüzden gerçek bir veritabanını burada çalıştırabilirsin:
Kenji 340
Omar 340
Ana 120
users: 4 average points: 222.5
Program nasıl arama yapılacağını hiç söylemez. İstediği sonucu tarif eder ve ona nasıl ulaşılacağına VTYS karar verir. Bir veritabanına soru sormakla bir liste üzerinde döngü yazmak arasındaki asıl fark budur.
Veritabanı türleri
| Tür | Veriyi nasıl saklar | Örnekler | Tipik kullanım |
|---|---|---|---|
| İlişkisel (SQL) | Anahtarlarla bağlanan, satır ve sütunlardan oluşan tablolar | PostgreSQL, MySQL, SQLite, Oracle, SQL Server | Kullanıcılar, siparişler, ödemeler: çoğu uygulama |
| Doküman | JSON benzeri dokümanlar | MongoDB, Firestore, CouchDB | Alanları kayıttan kayda değişen kayıtlar |
| Anahtar-değer | Tek bir anahtarla aranan bir değer | Redis, DynamoDB | Önbellekler, oturumlar, sayaçlar |
| Geniş sütunlu | Birçok sunucuya yayılmış, esnek sütunlu satırlar | Cassandra, HBase | Çok yüksek yazma hacimleri |
| Graf | Düğümler ve aralarındaki ilişkiler | Neo4j | Sosyal ağlar, öneriler |
| Zaman serisi | Zamana göre dizinlenmiş ölçümler | InfluxDB, TimescaleDB | Metrikler, sensör okumaları |
| Vektör | Sayı listeleri (embedding'ler) | pgvector, Pinecone, Milvus | Yapay zeka özellikleri için benzerlik araması |
İlişkisel olmayan her şey çoğu zaman NoSQL başlığı altında toplanır. İlişkisel veritabanları çoğu uygulama için varsayılan tercih olmaya devam eder, çünkü tablolar, kısıtlar ve SQL geniş bir sorun yelpazesini iyi karşılar. Birçok ürün türleri birleştirir de: PostgreSQL JSON dokümanları saklar, pgvector da ona vektör araması ekler.
Transaction'lar: ya hep ya hiç
Ana'dan Ben'e para aktarmak iki değişiklik gerektirir: Ben'e ekle, Ana'dan çıkar. Program ikisinin arasında çökerse para yoktan var olur. Bir transaction (işlem) değişiklikleri gruplar; böylece ya hepsi kaydedilir ya da hiçbiri. Burada ikinci değişiklik bir kuralı bozuyor (bakiye sıfırın altına inemez), bu yüzden veritabanı ilkini de geri alıyor:
transfer 30 done
{'ana': 20, 'ben': 30}
transfer 40 failed: CHECK constraint failed: balance >= 0
{'ana': 20, 'ben': 30}
Ben'e 40 eklendi ve sonra geri alındı, bu yüzden toplamlar hâlâ tutuyor. İlişkisel veritabanları transaction'lar için ACID olarak bilinen dört özelliği garanti eder: atomik (ya hep ya hiç), tutarlı (CHECK gibi kurallar her zaman geçerli), yalıtılmış (aynı anda transaction çalıştıran iki kullanıcı birbirinin yarım kalmış işini görmez) ve kalıcı (bir kez kaydedilen değişiklik bir çökmeden ya da elektrik kesintisinden sonra da kalır).
Veritabanı, elektronik tablo ve dosya karşılaştırması
| Metin ya da CSV dosyası | Elektronik tablo | Veritabanı | |
|---|---|---|---|
| Boyut | Programının yükleyebildiği kadar | Excel'de sayfa başına 1.048.576 satır | Milyarlarca satır |
| Aynı anda birden fazla yazan | Hayır | Sınırlı | Evet, kilitler ve transaction'larla |
| Tek bir kaydı bulmak | Tüm dosyayı oku | Filtrele ya da ara | Index ile arama |
| Veri üzerindeki kurallar | Yok | Opsiyonel doğrulama | Tipler, kısıtlar, yabancı anahtarlar |
| Soru sormak | Kendi kodunu yaz | Formüller | SQL ya da bir sorgu API'si |
Elektronik tablo, birkaç bin satıra bakan tek bir kişi için iyi bir araçtır. Birden fazla program ya da kullanıcı aynı anda veri yazdığında veya verinin kurallara uyması gerektiğinde doğru araç bir veritabanıdır.
Veritabanları veriyi nasıl korur
Bir VTYS her değişikliği veri dosyalarına dokunmadan önce bir log'a yazar (write-ahead log); böylece bir çökmeden sonra yarım kalan işi yeniden oynatabilir ya da geri alabilir. PostgreSQL her 8 KB'lık sayfada bir checksum saklayabilir ve arızalanan bir disk bozuk veri döndürdüğünde bir checksum hatası bildirir. Kullanıcılar ve izinler kimin hangi tabloları okuyabileceğine ya da değiştirebileceğine karar verir; replikasyon ise diğer sunucularda kopyalar tutar. Programlar da kullanıcı girdisini yukarıdaki ? yer tutucuları gibi parametre olarak geçmeli, asla SQL metnine yapıştırmamalıdır; SQL injection saldırıları bu şekilde olur.
Yaygın yanlış bilinenler
- "SQL bir veritabanıdır." SQL dildir. PostgreSQL, MySQL ve SQLite onu anlayan veritabanlarıdır.
- "NoSQL hiç SQL yok demektir." Terim genellikle "not only SQL" (yalnızca SQL değil) olarak okunur ve birçok NoSQL veritabanının Cassandra'nın CQL'i gibi SQL'e benzeyen sorgu dilleri vardır.
- "Veritabanı her zaman büyük bir sunucudur." SQLite, bir programın doğrudan açtığı, hiç sunucusu olmayan tek bir dosyadır. Her Android ve iOS telefonun içinde çalışır.
- "Veritabanındaki veri sonsuza kadar güvendedir." Bir veritabanı çökmelere karşı korur, birinin yanlışlıkla
DELETEçalıştırmasına karşı değil. Yedekler yine de gereklidir.
Sırada ne var
SQL kursu ilk SELECT'ten başlayarak sorguları öğretir. Sonraki adımları SQLite dokümanları anlatır: SQLite nedir, tablo oluşturma, index'ler ve SQL injection'ı önleme. Verinin diskte nasıl yerleştirildiğini görmek için byte nedir sayfasını oku; checksum sayfası ise hasarlı sayfaların nasıl tespit edildiğini açıklar.