Sql & Veritabanı İle Uygulamalar İçin Veri Saklama Mimarisi Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Verimli bir veritabanı mimarisi için öncelikle doğru araçları seçmelisiniz. 2026 yılı itibariyle PostgreSQL, gelişmiş özellikleri ve veri bütünlüğü konusundaki kararlılığı ile endüstri standardı haline gelmiştir. Çalışmalarınızda yerel ortamda Docker kullanarak bir veritabanı konteyneri ayağa kaldırmanız, geliştirme ve üretim ortamlarını eşitlemenizi kolaylaştıracaktır.

  • PostgreSQL 17+ veya MySQL 9.0+: Güncel güvenlik yamalarına sahip sürümler kullanın.
  • Veritabanı İstemcisi: DBeaver veya pgAdmin gibi görsel araçlar, karmaşık sorguları yönetmenizi sağlar.
  • ORM (Object-Relational Mapping): Uygulama kodunuzla veritabanı arasındaki köprüyü kurmak için modern ORM kütüphanelerini tercih edin.

Adım Adım Veri Normalizasyonu ve İlişkisel Tasarım

Veri saklama mimarisinin temeli, verinin gereksiz tekrarını önleyen normalizasyon işlemidir. Birinci normal form (1NF), ikinci normal form (2NF) ve üçüncü normal form (3NF) kurallarını uygulayarak veritabanı karmaşasını azaltırsınız. Örneğin, kullanıcı adreslerini ayrı bir tabloda tutmak, veri tutarlılığını artırır.

-- Kullanıcılar tablosu oluşturma
CREATE TABLE users (
    user_id SERIAL PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Adresler tablosu (1:N İlişki)
CREATE TABLE addresses (
    address_id SERIAL PRIMARY KEY,
    user_id INT REFERENCES users(user_id) ON DELETE CASCADE,
    city VARCHAR(100),
    country VARCHAR(100)
);

Yukarıdaki örnekte, users ve addresses tablolarını birbirine user_id üzerinden bağladık. Bu yapı, bir kullanıcının birden fazla adresi olabileceği senaryoları destekler ve verinin merkezi bir noktadan yönetilmesini sağlar.

İndeksleme Stratejileri ile Performans Artırma

Veritabanı mimarisinde hız, doğru indeksleme ile doğrudan ilişkilidir. Her sütuna indeks eklemek, yazma işlemlerini (INSERT, UPDATE) yavaşlatacağı için stratejik davranmalısınız. Sıkça sorgulanan sütunlar (örneğin e-posta veya kullanıcı adı) için B-Tree indeksleri kullanmak, arama hızını logaritmik seviyeye çeker.

-- İndeks oluşturma örneği
CREATE INDEX idx_users_email ON users(email);

-- Bileşik indeks (Composite Index) örneği
CREATE INDEX idx_user_location ON addresses(country, city);

İndeksler, veritabanının veriyi tam tarama (Full Table Scan) yapmadan bulmasını sağlar. Ancak, çok fazla indeksin veritabanı boyutunu artıracağını ve disk kullanımını etkileyeceğini unutmayın.

Güvenli Veri Saklama ve SQL Injection Koruması

Uygulama katmanında veritabanına erişirken en büyük risk SQL Injection saldırılarıdır. Dinamik SQL sorguları yazmak yerine, her zaman hazırlanan ifadeleri (Prepared Statements) veya ORM'lerin sağladığı parametreli sorgu yöntemlerini kullanmalısınız. Kullanıcı şifreleri ise asla düz metin olarak saklanmamalıdır.

-- Güvensiz kullanım (YAPMAYIN)
-- "SELECT * FROM users WHERE username = '" + userInput + "';"

-- Güvenli kullanım (Parametreli sorgu)
PREPARE get_user_by_name (text) AS
SELECT * FROM users WHERE username = $1;

EXECUTE get_user_by_name('kullanici_adi');
Kritik Uyarı: Veritabanı bağlantı bilgilerini (host, user, password) asla kaynak kod içerisinde doğrudan yazmayın. .env dosyaları veya güvenli kasa (Vault) sistemlerini tercih edin.

Veritabanı Mimarisi Yöntemleri Karşılaştırması

Yöntem Avantajı Dezavantajı
İlişkisel (SQL) Veri bütünlüğü, ACID uyumluluğu Ölçeklendirme zorluğu
Doküman (NoSQL) Esnek şema, hızlı okuma İlişkisel veri tutarlılığı eksikliği
Hibrit Yapı İhtiyaca göre her iki dünyanın en iyisi Yönetim karmaşıklığı

Veri Yedekleme ve Felaket Kurtarma Planı

Veri saklama mimarisi, sadece veriyi yazmak değil, aynı zamanda onu korumaktır. 2026 standartlarında, veritabanı yedeklemeleri otomatikleştirilmeli ve "Point-in-Time Recovery" (PITR) desteği sağlanmalıdır. Yedeklerin farklı bir coğrafi bölgede saklanması, sistemin sürekliliği için hayati önem taşır.

-- Veritabanı yedeği alma komutu (pg_dump)
pg_dump -U username -h localhost db_name > backup_2026_05_20.sql

Yedekleme stratejinizde haftalık tam yedekleme ve günlük artımlı (incremental) yedekleme kombinasyonunu kullanmanızı öneririz.

Sıkça Sorulan Sorular

Veritabanı mimarisinde "ACID" prensibi nedir?

ACID; Atomicity (Atomiklik), Consistency (Tutarlılık), Isolation (Yalıtım) ve Durability (Dayanıklılık) kavramlarının baş harfleridir. Veritabanı işlemlerinin güvenli ve hatasız tamamlanmasını garanti eder.

İndeksleri ne zaman güncellemeliyim?

Uygulama trafiğiniz arttıkça ve yavaş sorgular (slow queries) tespit ettiğinizde, veritabanı analiz araçları (EXPLAIN ANALYZE) kullanarak hangi sütunların indekse ihtiyaç duyduğunu belirlemelisiniz.

NoSQL mi yoksa SQL mi seçmeliyim?

Eğer verileriniz katı bir ilişki yapısına sahipse ve finansal işlemler gibi tutarlılığın kritik olduğu bir sistem kuruyorsanız SQL; çok hızlı değişen ve esnek şemaya ihtiyaç duyan büyük veri setleri için NoSQL tercih edilmelidir.

SQL Injection saldırısından nasıl %100 korunurum?

Kullanıcıdan gelen her türlü veriyi "güvenilmez" kabul edin. Parametreli sorgular (Prepared Statements) ve veritabanı kullanıcısının yetkilerini kısıtlamak (Least Privilege Principle) en etkili yöntemdir.

Veritabanı bağlantı havuzu (Connection Pooling) neden gereklidir?

Her istekte yeni bir veritabanı bağlantısı açmak maliyetlidir. Bağlantı havuzu, hazır bağlantıları yeniden kullanarak uygulama performansını ciddi oranda artırır.

Sorumluluk Reddi: Bu rehberdeki kod örnekleri eğitim amaçlıdır. Uygulama ortamına almadan önce güvenlik testlerini (penetrasyon testleri) yapmanız ve veritabanı yetkilendirmelerini en düşük seviyede tutmanız önemle rica olunur.

Veritabanı Performansını İzleme ve Darboğaz Analizi

Bir veritabanı mimarisi tasarlandıktan sonra, sistemin zamanla nasıl tepki verdiğini gözlemlemek kritik öneme sahiptir. Özellikle yüksek trafikli uygulamalarda, sorgu sürelerinin uzaması genellikle eksik indekslerden veya verimsiz "JOIN" işlemlerinden kaynaklanır. Veritabanı performansını izlemek için SQL tabanlı analiz araçlarını kullanmak, sistemdeki darboğazları anında tespit etmenizi sağlar.

Yavaş Sorguları Tespit Etme (PostgreSQL Örneği)

PostgreSQL gibi sistemlerde, belirli bir sürenin üzerinde çalışan sorguları yakalamak için pg_stat_statements modülünü kullanabilirsiniz. Bu, hangi sorgunun sistem kaynaklarını tükettiğini görmenizi sağlar.

-- En çok zaman harcayan ilk 5 sorguyu listeleme
SELECT query, calls, total_exec_time, mean_exec_time
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 5;

Bu verileri topladıktan sonra, EXPLAIN ANALYZE komutu ile sorgunun neden yavaş çalıştığını adım adım inceleyebilirsiniz. Eğer sorgu bir "Sequential Scan" (tam tablo taraması) yapıyorsa, ilgili sütunlara indeks ekleyerek performansı dramatik şekilde artırabilirsiniz.

Veritabanı Migration (Göç) Yönetimi

Uygulamanız geliştikçe veritabanı şemanız da değişecektir. Elle SQL komutları çalıştırmak yerine, "Migration" araçlarını kullanmak, veritabanı versiyon kontrolünü sağlamak için zorunludur. Bu yöntem, ekip çalışmasında herkesin aynı veritabanı yapısına sahip olmasını garanti eder.

Örnek Bir Migration Senaryosu

Modern frameworkler (Entity Framework, Sequelize, TypeORM) kendi migration sistemlerini sunar. Bir tabloya yeni bir sütun eklerken izlemeniz gereken standart akış şu şekildedir:

  1. Değişikliği Tanımla: Migration dosyasını oluştur.
  2. Up (İleri) Fonksiyonu: Tabloya sütunu ekle (ALTER TABLE).
  3. Down (Geri) Fonksiyonu: Hata durumunda değişikliği geri al (DROP COLUMN).
-- Migration örneği: Kullanıcılar tablosuna 'last_login' ekleme
-- UP işlemi
ALTER TABLE users ADD COLUMN last_login TIMESTAMP;

-- DOWN işlemi
ALTER TABLE users DROP COLUMN last_login;

Bu yaklaşım, veritabanı mimarinizin "tarihçesini" tutmanızı sağlar. Eğer bir güncelleme sonrası sistemde hata alırsanız, veritabanını bir önceki kararlı sürüme saniyeler içinde döndürebilirsiniz. Profesyonel projelerde, asla üretim (production) ortamında doğrudan manuel SQL sorguları çalıştırmayın; her zaman bir migration dosyası hazırlayın.

Profesyonel İpucu: Büyük veritabanlarında şema değişikliği yaparken (örneğin bir sütunu silmek veya tipini değiştirmek), veritabanının kilitlenmemesi (lock) için "online migration" tekniklerini veya "Expand/Contract" desenini araştırmanızı öneririm.

Sonuç

Sql & Veritabanı ile uygulamalar için veri saklama mimarisi oluşturmak, projenizin temelini sağlamlaştırmak demektir. Normalizasyon kurallarına uymak, doğru indeksleme stratejileriyle performansı optimize etmek ve güvenlikten ödün vermemek, profesyonel bir yazılım geliştiricinin temel görevidir. Bu rehberde öğrendiğiniz adımları uygulayarak, 2026 yılı standartlarında ölçeklenebilir ve güvenli veritabanı mimarileri tasarlayabilirsiniz. Bir sonraki adım olarak, veritabanı performansını izlemek için "Prometheus" ve "Grafana" gibi araçları kullanarak sisteminizi canlı olarak gözlemlemeyi deneyebilirsiniz.

Bu yazıya tepkinizi paylaşın:
Kerem Tekin

Teknoloji ve yazılım kullanımı üzerine pratik kılavuzlar hazırlıyorum. Karmaşık dijital araçları, herkesin hızlıca öğrenebileceği sade rehberler haline getirmekte uzmanım.

Yorumlar (0)

Yorum Yaz