Yaptığınız bir yazılımın birden fazla veritabanı ile gayet sorunsuz çalıştığını düşünün. Programı çalıştırıyorsunuz, program size bir liste içerisinde kullanabileceğiniz veritabanlarının bir listesini gösteriyor ve siz listeden size uygun olanı seçerek programı çalıştırıyorsunuz.
Bunun hem size hem de kullanıcıya maddi anlamda çok büyük bir rahatlık getireceği aşikar. Daha fazla hız ve daha fazla güvenlik istenen bir ortamda Oracle kullanabileceğiniz gibi orta ve küçük ölçekli yerlerde mySql, Firebird gibi veritabanlarını kullanabilirsiniz.
Bu tür işler için geliştirilmiş başka teknolojiler var mıdır bilmiyorum ama benim etrafımda görebildiğim bir kaç teknolojiden bahsetmek istiyorum.
İlk söylemek istediğim aslında böyle birşeyin olamayacağı :) Tıpkı "bir kere derle, her işletim sisteminde çalıştır" sözü gibi...
Yani extra kod yazmadan böyle bir şeyin çok sağlıklı bir şekilde yapılabileceği şimdilik uzun bir hayal çünkü veritabanı sistemleri arasında oldukça büyük farklar var. Birisi Stored prosedürleri destekler birisi desteklemez, birisinde tetikleyiciler vardır diğerinde yoktur, birinde otomatik artan sayı vardır diğerinde yoktur v.s. v.s. (Aslında bırakın bu tür yapısal farklılıkları sql lehçelerinde bile inanılmaz farklılıklar var.)
3 yol var :
1 -
Case Veritabanı Of
mySql: bla1 bla1 ;
firebird: bla2 bla2;
oracle : bla3 bla3;
sybase: bla4 bla4;
end;
tarzı kodlarla farklı olan yerleri manuel olarak biz yönetecez ve bu da programdaki kod ve hata sayısının kabarıklaşmasına neden olacak. Kafamızı karman çorman etmesini hiç söylemiyorum bile...
2- Kullanmak istediğimiz her veritabanının ortak alt kümesi belirlenir ve bu şekilde sadece connection stringi değiştirerek aynı programla birden fazla veritabanına destek vermiş olursunuz. İşin güzel yanı; fazla kod yoktur, fazla kafa karışıklığı yoktur, hata oluşma şansı çok azdır fakat alacağınız performans çok azdır. Hiçbir veritabanının üstün özelliklerinden faydalanamazsınız.
3- 1. ve 2. maddelerin karışımını uygulamak ve çok büyük hayaller kurmamak :) Böyle birşey çok elzemse Firebird + Oracle ikilisiyle sorunsuz şekilde çalışan bir uygulama yazın ve öpüp başınızın üzerine koyun.
Gelelim kullanılabilecek teknolojilere...
Yukarıdaki resimde bu teknolojilerin bir kısmını görebiliyoruz.
Tabi biz olaya sadece Delphi penceresinden bakacağımız için burda Delphi ile standart olarak gelen teknolojilere bakacaz. Bunların haricinde daha başka birşeyler bulmak pekala mümkün. Örnek : ZeosLib (http://sourceforge.net/projects/zeoslib/)
dbGO : Borlandın Ado'ya erişmek için kullandığı kütüphane. dbGo kullanarak odbc üzerinden bütün veritabanlarına bağlanabilirsiniz. Ado.net ne durumdadır bilemiyorum ama şahsen ado'yu Access ve Ms SQL haricinde bir veritabanı ile kullanmayı pek tercih etmem. Ado'nun asıl sorunu sadece Windows platformunda çalışması. Yani ben o kadar kasacam, birden fazla veritabanı ile çalışan bir program yazacam ve bu program sadece windows ortamında çalışacak. Olmaz kardeşim :)
Bde : Bde olmaz. Neden ?
1- Artık geliştirilmiyor.
2- Kylix için mevcut bir sürümü yok
dbExpress : Borlandın ado ve bde'ye alternatif olarak geliştirdiği kütüphane. Özellikleri :
1- Veritabanı yönetim sistemleri ile çalışması
2- Kylix desteği sayesinde linux platformunu desteklemesi
3- Terminal bilgisayarlarda extra bir sürücü yüklemeye gerek kalmaması
4- Hızlı olması
5- Sürücü kütüphanesinin 3. şahıslar tarafından da geliştirilebilmesi
dbexpress'in mantığı çok basit aslında. Bir veritabanına bağlanmak ve programdan gelen sql sorgusunu çalıştırıp dönen sonuçları direkt olarak tekrar programa göndermek. dbexpress'in önemli bir özelliği sadece ileriye yönelik imleçler içermesi. Bunun anlamı bir dbexpress tablosunu dbGride bağlayıp üzerinde hareket edemezsiniz. Kayıtlar üzerinde sadece ileriye doğru hareket edebilirsiniz. Bu ne işe yarar gibi gelebilir ilk başta ama dbexpresi ilginç yapan özellik bu :) Eğer kayıtlar üzerinde ileri geri sağa sola hareket etmek istiyorsanız clientdataset bileşenine göz atabilirsiniz...
bu konuyla ilgilenmeye devam edecem. konu hakkında yorumlarınızı esirgemeyin. bu konuda cahal kalmayayım :)

Yorumlar
a ) Genel işlemler
b ) Tablo işlemleri
Tablo işlemlerini ise 3'e ayırıyorum :
a ) Veri girme
b ) Veri silme
c ) Veri güncelleme
Esasında yapılan işlemler bundan fazlası olmuyor çoğu zaman.
Burada ise yapılacak ne vardır diye aradığımızda akla en mantıklı gelen OOP oluyor.
OOP'de ise iki tür programlama yapmak mümkün.
a ) Genel olarak VT işlemlerininin tanımlandığı üst sınıf ve özel işlemlerin tanımlandığı alt sınıf. (Mesela üst sınıfta sadece genel olarak "giriş" yapan bir sınıf vardır. Alt sınıfta ise bu girişin sql paremetreleri vardır, gibi...)
b ) Her bir veritabanı için tek bir sınıf.
Mantıklı olan ise a şıkkındaki gibi genel bir G/Ç işlemleri sınıfı ve onun altında özel olarak o VT sunucusu için yazılmış sınıflar.
Şöyle bir yapı çıkıyor ortaya :
+ Class DB
+++ Class mySQL
+++ Class msSQL
+++ Class SQLite
Burada özel class'lara da alt classlar tanımlayarak işi daha bir ağaç yapısına kavuşturmak (=çoğu zaman işi daha fazla karıştırmak) mümkün.
Kod içinden programcı bunları yapabilir. Basit bir yöntemdir aslında. Şu sıralarda oldukça sık kullanılmaktadır. Daha soyut kod yazıldığı için P programcısının yazdığı bir sınıfı diğer bir programcı alıp kolayca programına ekleyip, programını P programcısının sınıfı ile yazabilmektedir.