Skip to content

2. Firebird Eğitimi

SQL dilinin temellerine geçmeden önce, okuyucuya SGBD Firebird'ü ve IB-Expert grafik istemcisini nasıl kuracağını anlatacağız.

2.1. Firebird'ü nereden bulabilirim?

Firebird'ün ana web sitesi [http://firebird.sourceforge.net/]'tir. İndirme sayfasında şu bağlantılar yer almaktadır (Nisan 2005):

Image

Aşağıdaki öğeleri indireceksiniz:

firebird-win32
Windows için SGBD
firebird-net-provider
NET sürücüsüne başvurmadan SGBD'e erişim sağlayan .NET uygulamaları için bir sınıf kütüphanesi.
firebird-ODBC-driver
Firebird'ün ODBC sürücüsü

Bu bileşenleri kurun. SGBD, içeriği aşağıdakine benzer bir klasöre kurulur:

İkili dosyalar [bin] klasöründedir:

fbguard.exe
SGBD dosyasını başlatmaya/durdurmaya yarar
isql.exe
veritabanlarını yönetmeye olanak tanıyan istemci

Varsayılan olarak, SGBD yöneticisinin adı [SYSDBA] ve şifresi [masterkey]'tir. [Démarrer]'e aşağıdaki menüler eklenmiştir:

Image

[Firebird Guardian] seçeneği, SGBD'i başlatmaya/durdurmaya yarar. Başlatıldıktan sonra, SGBD simgesi Windows görev çubuğunda kalır:

[isql.exe] komut satırı istemcisi ile Firebird veritabanları oluşturmak ve kullanmak için, ürünle birlikte [doc] klasöründe bulunan belgeleri okumanız gerekir.

2.2. Firebird belgeleri

Firebird ve SQL diliyle ilgili belgeler, Firebird web sitesinde (Ocak 2006) bulunabilir:

Image

Çeşitli kılavuzlar İngilizce olarak mevcuttur:

Firebird 1.5 Quick Start Guide
FB ile başlamak için
Firebird 1.5 Error Codes
FB tarafından döndürülen hata kodlarını anlamak için

SQL diline ilişkin eğitim kılavuzları da mevcuttur:

Image

Data Definition Guide
tabloların nasıl oluşturulacağını, hangi veri türlerinin kullanılabileceğini öğrenmek için...
Language Reference
Firebird ile SQL'i öğrenmek için referans kılavuzu

Firebird ile çalışmanın ve SQL dilini öğrenmenin hızlı bir yolu, bir grafik istemci kullanmaktır. Bu tür bir istemci, bir sonraki paragrafta açıklanan IB-Expert'tir.

2.3. IB- Expert ile SGBD Firebird ile çalışmak

IB-Expert'in ana web sitesi [http://www.ibexpert.com/]'tir. İndirme sayfasında aşağıdaki bağlantılar bulunmaktadır:

Image

Ücretsiz sürüm olan [Personal Edition]'i seçin. Bu sürüm indirilip kurulduktan sonra, aşağıdakine benzer bir klasör elde edersiniz:

Image

Yürütülebilir dosya [ibexpert.exe]'tir. Normalde [Démarrer] menüsünde bir kısayol bulunur:

Image

IBExpert başlatıldığında aşağıdaki pencere görüntülenir:

Image

Bir veritabanı oluşturmak için [Database/Create Database] seçeneğini kullanalım:

Server
[local] veya [remote] olabilir. Burada sunucumuz [IBExpert] ile aynı makinede bulunuyor. Bu nedenle [local]'i seçiyoruz
Database
veritabanı dosyasını belirtmek için açılır menüdeki [dossier] türü düğmeyi kullanın. Firebird, tüm veritabanını tek bir dosyaya yerleştirir. Bu, Firebird’ün avantajlarından biridir. Veritabanını bir bilgisayardan diğerine, dosyayı basitçe kopyalayarak taşıyabilirsiniz. [.gdb] son eki otomatik olarak eklenir.
Username
SYSDBA, mevcut Firebird dağıtımlarının varsayılan yöneticisidir
Password
masterkey, mevcut Firebird dağıtımlarındaki SYSDBA yöneticisinin şifresidir
Dialect
Kullanılacak lehçe SQL'tir
Register Database
Bu kutucuk işaretlendiğinde, IBExpert, veritabanı oluşturulduktan sonra bu veritabanına bir bağlantı sunacaktır

Oluşturma düğmesi [OK]'e tıkladığınızda aşağıdaki uyarıyı alırsanız:

Image

bu, Firebird'ü başlatmadığınız anlamına gelir. Firebird'ü başlatın. Yeni bir pencere açılır:

Image

Charset
Kullanılacak karakter ailesi. Yukarıdaki ekran görüntüsünde herhangi bir bilgi görünmese de, açılır listeden aksanlı Latin karakterlerin kullanılmasını sağlayan [ISO-8859-1] karakter ailesini seçmeniz önerilir.
Server version
[IBExpert], Interbase'den türetilmiş çeşitli SGBD sürümlerini destekler. Yüklediğiniz Firebird sürümünü seçin:

Bu yeni pencere [Register] tarafından onaylandıktan sonra şu sonuç elde edilir:

Image

Oluşturulan veritabanına erişmek için bağlantısına çift tıklamanız yeterlidir. IBExpert, veritabanının özelliklerine erişim sağlayan bir ağaç yapısı gösterir:

Image

2.4. Veri tablosu oluşturma

Bir tablo oluşturalım. [Tables]'e sağ tıklayıp (yukarıdaki pencereye bakın) [New Table] seçeneğini seçin. Tablo özelliklerini tanımlama penceresi açılır:

Öncelikle, [1] giriş alanını kullanarak tabloya [ARTICLES] adını verelim:

[2] giriş alanını kullanarak [ID] birincil anahtarını tanımlayalım:

Bir alan, alanın üzerindeki [PK] (Birincil Anahtar) alanına çift tıklanarak birincil anahtar olarak belirlenir. [3]'in üstündeki düğmeyi kullanarak alanlar ekleyelim:

Image

Tanımımızı "derlemedikçe" tablo oluşturulmaz. Tablonun tanımını tamamlamak için yukarıdaki [Compile] düğmesini kullanalım. IBExpert, tablonun oluşturulmasına yönelik SQL sorgularını hazırlar ve onay ister:

Image

İlginç bir şekilde, IBExpert, çalıştırdığı SQL sorgularını görüntüler. Bu, hem SQL dilini hem de muhtemelen kullanılan özel SQL lehçesini öğrenmeye olanak tanır. [Commit] düğmesi, devam eden işlemi onaylamaya, [Rollback] düğmesi ise iptal etmeye yarar. Burada [Commit] ile işlemi kabul ediyoruz. Bu işlem tamamlandıktan sonra, IBExpert, oluşturulan tabloyu veritabanımızın dizin yapısına ekler:

Image

Tabloya çift tıklayarak özelliklerine erişebiliriz:

Image

[Constraints] paneli, tabloya yeni bütünlük kısıtlamaları eklememizi sağlar. Paneli açalım:

Image

Oluşturduğumuz birincil anahtar kısıtlamasını burada görebiliriz. Başka kısıtlamalar da ekleyebiliriz:

  • yabancı anahtarlar [Foreign Keys]
  • alan bütünlüğü kısıtlamaları [Checks]
  • alan benzersizlik kısıtlamaları [Uniques]

Şunu belirtelim:

  • [ID, PRIX, STOCKACTUEL, STOKMINIMUM] alanlarının değeri >0 olmalıdır
  • [NOM] alanı boş olmamalı ve benzersiz olmalıdır

[Checks] panelini açalım ve kısıtlamaların tanımlandığı alana sağ tıklayarak yeni bir kısıtlama ekleyelim:

Image

İstenen kısıtlamaları tanımlayalım:

Image

Yukarıda, [NOM<>''] kısıtlamasında tırnak işareti yerine iki apostrof kullanıldığına dikkat edin. Bu kısıtlamaları yukarıdaki [Compile] düğmesiyle derleyelim:

Image

Burada da IBExpert, çalıştırdığı SQL sorgularını göstererek açıklayıcı bir yaklaşım sergiliyor. Şimdi, adın benzersiz olması gerektiğini belirtmek için [Constraints/Uniques] paneline geçelim. Bu, tabloda aynı adın iki kez bulunamayacağı anlamına gelir.

Image

Kısıtlamayı tanımlayalım:

Image

Ardından bunu derleyelim. Bu işlem tamamlandıktan sonra, [ARTICLES] tablosunun [DDL] (Veri Tanımlama Dili) panelini açalım:

Image

Bu panel, tüm kısıtlamaları içeren tablonun oluşturulmasına ilişkin SQL kodunu gösterir. Bu kodu daha sonra tekrar çalıştırmak üzere bir komut dosyasına kaydedebiliriz:

SET SQL DIALECT 3;
SET NAMES NONE;
CREATE TABLE ARTICLES (
    ID            INTEGER NOT NULL,
    NOM           VARCHAR(20) NOT NULL,
    PRIX          DOUBLE PRECISION NOT NULL,
    STOCKACTUEL   INTEGER NOT NULL,
    STOCKMINIMUM  INTEGER NOT NULL
);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_ID check (ID>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_PRIX check (PRIX>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKACTUEL check (STOCKACTUEL>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKMINIMUM check (STOCKMINIMUM>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_NOM check (NOM<>'');
ALTER TABLE ARTICLES ADD CONSTRAINT UNQ_NOM UNIQUE (NOM);
ALTER TABLE ARTICLES ADD CONSTRAINT PK_ARTICLES PRIMARY KEY (ID);

2.5. Tabloya veri ekleme

Şimdi [ARTICLES] tablosuna veri girme zamanı. Bunun için [Data] panelini kullanalım:

Image

Veriler, tablonun her satırındaki giriş alanlarına çift tıklanarak girilir. [+] düğmesi ile yeni bir satır eklenir, [-] düğmesi ile bir satır silinir. Bu işlemler, [Commit Transaction] düğmesi ile onaylanan bir işlem içinde gerçekleştirilir (yukarıya bakınız). Bu onay yapılmazsa veriler kaybolur.

2.6. SQL düzenleyicisi ([IB-Expert])

SQL dili (Yapısal Sorgu Dili), bir kullanıcının şunları yapmasına olanak tanır:

  1. depolayacağı veri türünü ve bu verilerin uyması gereken kısıtlamaları belirterek tablolar oluşturmak
  1. tablolara veri eklemek
  2. bazı verileri değiştirmek
  3. bazı verileri silmek
  4. bilgi elde etmek için içeriği değerlendirmek
  5. ...

IBExpert, kullanıcının 1'den 4'e kadar olan işlemleri grafiksel olarak gerçekleştirmesine olanak tanır. Bunu az önce gördük. Veritabanında her biri yüzlerce satır içeren çok sayıda tablo bulunduğunda, görsel olarak elde edilmesi zor bilgilere ihtiyaç duyulur. Örneğin, bir çevrimiçi mağazanın ayda binlerce alıcısı olduğunu varsayalım. Tüm satın alımlar bir veritabanına kaydedilir. Altı ay sonra, "X" adlı bir üründe bir kusur olduğu ortaya çıkar. Ürünü satın alan tüm kişilerle iletişime geçerek, ücretsiz değişim için ürünü iade etmelerini istemek istenir. Bu alıcıların adreslerini nasıl bulabiliriz?

  1. Tüm tabloları tek tek inceleyip bu alıcıları arayabiliriz. Bu işlem birkaç saat sürer.
  2. SQL komutunu vererek bu kişilerin listesini birkaç saniye içinde elde edebiliriz

SQL dili,

  • tablolardaki veri miktarı fazla olduğunda
  • birbiriyle ilişkili çok sayıda tablo olduğunda
  • elde edilecek bilgi birden fazla tabloya dağılmışsa
  • ...

Şimdi IBExpert'in SQL düzenleyicisini tanıtıyoruz. Bu düzenleyiciye [Tools/SQL Editor] veya [F12] seçeneği üzerinden erişilebilir:

Image

Böylece, sorguları deneme imkanı sunan gelişmiş bir SQL sorgu düzenleyicisine erişebiliriz. Bir sorgu girelim:

Image

Yukarıdaki [Execute] düğmesiyle SQL sorgusunu çalıştırıyoruz. Aşağıdaki sonucu elde ediyoruz:

Image

Yukarıda, [Results] sekmesi, SQL [Select] emrinin sonuç tablosunu göstermektedir. Yeni bir SQL komutu vermek için, [Edit] sekmesine geri dönmeniz yeterlidir. Burada, daha önce çalıştırılmış olan SQL komutunu bulabilirsiniz.

Image

Araç çubuğundaki birkaç düğme kullanışlıdır:

  • [New Query] düğmesi, yeni bir SQL isteğine geçmenizi sağlar:

Image

Böylece boş bir düzenleme sayfası açılır:

Image

Böylece yeni bir komut olan SQL'i girebiliriz:

Image

ve bunu çalıştırabiliriz:

Image

[Edit] sekmesine geri dönelim. Verilen çeşitli SQL komutları, [IB-xpert] tarafından saklanır. [Previous Query] düğmesi, daha önce oluşturulan bir SQL emrine geri dönmenizi sağlar:

Image

Böylece bir önceki talebe geri dönülür:

Image

[Next Query] düğmesi ise bir sonraki SQL emrine geçilmesini sağlar:

Image

Böylece, kaydedilmiş SQL siparişleri listesinde bir sonraki sipariş olan SQL'e ulaşırız:

Image

[Delete Query] düğmesi, SQL emrini kaydedilmiş emir listesinden silmenizi sağlar:

Image

[Clear Current Query] düğmesi, görüntülenen SQL emri için düzenleyicinin içeriğini silmenizi sağlar:

Image

[Commit] düğmesi, veritabanında yapılan değişiklikleri kalıcı olarak kaydetmenizi sağlar:

Image

[RollBack] düğmesi, son [Commit] işleminden bu yana veritabanında yapılan değişiklikleri geri almayı sağlar. Veritabanına bağlanıldığından beri herhangi bir [Commit] işlemi yapılmamışsa, bu bağlantıdan itibaren yapılan değişiklikler geri alınır.

Image

Bir örnek verelim. Tabloya yeni bir satır ekleyelim:

Image

SQL komutu çalıştırılır, ancak herhangi bir çıktı görüntülenmez. Ekleme işleminin gerçekleşip gerçekleşmediği bilinmez. Bunu öğrenmek için, [New Query] komutunun ardından SQL komutunu çalıştıralım:

Image

[Execute] komutunda şu sonuç elde edilir:

Image

Dolayısıyla satır başarıyla eklenmiştir. Şimdi tablonun içeriğini başka bir yolla inceleyelim. Veritabanı gezgininde [ARTICLES] tablosuna çift tıklayalım:

Image

Aşağıdaki tablo karşımıza çıkıyor:

Image

Yukarıdaki ok düğmesi, tabloyu yenilemeye yarar. Yenileme işleminden sonra yukarıdaki tablo değişmez. Sanki yeni satır eklenmemiş gibi bir izlenim ediniriz. SQL (F12) düzenleyicisine geri dönelim ve ardından [Commit] düğmesiyle gönderilen SQL emrini onaylayalım:

Image

Bunu yaptıktan sonra, [ARTICLES] tablosuna geri dönelim. [Refresh] düğmesini kullansak bile hiçbir şeyin değişmediğini görebiliriz:

Image

Yukarıda, [Fields] sekmesini açalım ve ardından [Data] sekmesine geri dönelim. Bu sefer eklenen satır doğru şekilde görünüyor:

Image

Çeşitli SQL komutlarının yürütülmesi başladığında, düzenleyici veritabanında bir "işlem" açar. SQL komutlarıyla SQL düzenleyicisinde yapılan değişiklikler, yalnızca aynı SQL düzenleyicisinde kaldığımız sürece görünür olacaktır (birden fazla düzenleyici açılabilir). Sanki SQL düzenleyicisi gerçek veritabanı üzerinde değil de kendisine ait bir kopya üzerinde çalışıyormuş gibi görünür. Gerçekte işler tam olarak bu şekilde gerçekleşmez, ancak bu örnek işlem kavramını anlamamıza yardımcı olabilir. Bir işlem sırasında kopyada yapılan tüm değişiklikler, ancak bir [Commit Transaction] ile onaylandığında gerçek veritabanında görünür hale gelir. Bu noktada mevcut işlem sona erer ve yeni bir işlem başlar.

Bir işlem sırasında yapılan değişiklikler, [Rollback] adlı bir işlemle geri alınabilir. Şu deneyi yapalım. Aşağıdaki SQL komutuyla yeni bir işlem başlatalım (bunun için mevcut işlem üzerinde [Commit] komutunu çalıştırmak yeterlidir):

Image

[ARTICLES] tablosundaki tüm satırları silen bu komutu çalıştıralım, ardından aşağıdaki yeni SQL komutunu çalıştıralım:

Image

Şu sonucu elde ediyoruz:

Image

Tüm satırlar silinmiştir. Bunun, [ARTICLES] tablosunun bir kopyası üzerinde yapıldığını hatırlayalım. Bunu doğrulamak için, aşağıdaki [ARTICLES] tablosuna çift tıklayalım:

Image

ve [Data] sekmesini görüntüleyelim:

Image

[Refresh] düğmesini kullansak veya [Fields] sekmesine geçip ardından [Data] sekmesine geri dönsek bile, yukarıdaki içerik değişmez. Bunun nedeni daha önce açıklanmıştı. Şu anda, kendi kopyası üzerinde çalışan başka bir işlem içindeyiz. Şimdi SQL (F12) düzenleyicisine geri dönelim ve [RollBack] düğmesini kullanarak yapılan satır silme işlemlerini geri alalım:

Image

Onay isteniyor:

Image

Onaylayalım. SQL düzenleyicisi, değişikliklerin geri alındığını onaylar:

Image

Doğrulamak için yukarıdaki SQL isteğini tekrar çalıştıralım. Silinmiş olan satırları tekrar görüyoruz:

Image

[Rollback] işlemi, SQL düzenleyicisinin üzerinde çalıştığı kopyayı, işlemin başlangıcındaki durumuna geri getirdi.