🔗 Ekosistem
Ekosistem: Veritabanı ekosistemini bir araç filosu gibi düşün: SQLite bir katlanır bisiklettir — çantana koyar, her yere götürürsün, kurulum istemez; PostgreSQL ise TIR'dır — yük
Veritabanı ekosistemini bir araç filosu gibi düşün: SQLite bir katlanır bisiklettir — çantana koyar, her yere götürürsün, kurulum istemez; PostgreSQL ise TIR'dır — yükleme rampası, sürücü belgesi ve bakım ister ama ağır işi o taşır; MySQL ikisinin arasında, çoğu web uygulamasının altındaki minibüstür. Peki hepsi SQL konuşuyorsa, hangisini kullandığın gerçekten fark eder mi? Sorunun bam teli burada: standart SQL'in üzerine her motor kendi lehçesini ekler. SQLite'ta `AUTOINCREMENT`, PostgreSQL'de `SERIAL`/`IDENTITY`, MySQL'de `AUTO_INCREMENT`'tır; tarih fonksiyonları, JSON desteği ve hatta boş string ile NULL'ın ayrımı motordan motora değişir. Testlerini SQLite üzerinde koşup uygulamayı PostgreSQL'de çalıştırdığında, yeşil geçen testler production'da kırılabilir — çünkü ölçtüğün şey uygulamanın davranışı değil, iki farklı motorun davranışının kesişimidir. Java tarafındaki karşılığı doğrudan tanıdıktır: her motorun bir JDBC driver'ı vardır ve `DriverManager.getConnection(url, ...)` çağrısında değişen tek şey URL'dir — ama bu 'aynı arayüz' rahatlığı, altta lehçe farkı olmadığı anlamına gelmez. ORM katmanları (Hibernate, SQLAlchemy, Prisma) bu farkı gizlemeye çalışır; gizlemeyi başaramadığı yerde de en zor bug'lar orada doğar. QA için pratik kural şudur: hız gereken smoke/unit seviyesinde SQLite kabul edilebilir, ama entegrasyon ve regression testleri production ile AYNI motor ve mümkünse aynı major sürüm üzerinde koşmalıdır. Bunu ucuza sağlamanın yolu bellidir: Docker ile testcontainer olarak gerçek PostgreSQL ayağa kaldırmak.
Veritabanı Motorlarının Karşılaştırılması
Veritabanı Sürücüleri (Drivers)
Sürücüler, programlama dillerinin veritabanı motoruyla konuşmasını sağlayan çeviricilerdir. Test otomasyonunda, sorguları çalıştırmak ve test sonuçlarını almak için dile özgü kütüphaneler kullanırız.
Veritabanı Bağlayıcıları (Connectors)
Python Bağlayıcıları
Python sqlite3 yerleşik olarak gelir. Diğer veritabanları harici paket yüklemesi gerektirir.
Java JDBC Bağlayıcıları
Java JDBC kullanır. Sürücülerin pom.xml/build.gradle bağımlılıklarına eklenmesi şarttır.
ORM (Nesne-İlişkisel Eşleme)
ORM araçları veritabanı tablolarını nesneye yönelik programlama sınıflarına eşler. Uygulama geliştirme için harika olsalar da, QA test otomasyonunda doğrudan ham SQL sorguları atmak; karmaşık ORM modelleri kurup sürdürmekten daha hızlı, esnek ve az zahmetlidir.
Veritabanı Ekosistemi: Motorlar, Sürücüler ve ORM
Veritabanı mimarisinde katmanlar arası iletişim şu bileşenlerle sağlanır: - **Veritabanı Motoru (Engine)**: Veriyi yöneten sunucudur (örn: PostgreSQL, MySQL). - **Sürücü (Driver)**: Programlama dilinin veritabanına bağlanmasını sağlayan kütüphanedir. Python sqlite3 sürücüsü yerleşik gelirken, PostgreSQL için `psycopg2`, Java için ise Maven/Gradle ile JDBC sürücüsü eklenmelidir. - **ORM (Object-Relational Mapping)**: Tabloları kod nesnelerine eşler. QA otomasyon testlerinde (test verisi ekleme/temizleme vb.) ORM modellerinin kurulumu karmaşık olduğundan, ham SQL kullanımı daha basit ve hızlıdır.
🎬 Test Scriptinden Motora: Driver Köprüsü