Veritabanı Uygulaması Geliştirmek


Bu Veritabanı Uygulamaları geliştirmek makale dizisinin bu bölümünde Veritabanının ne olduğundan başlayıp, veritabanı tabanı tasarımına, veri tabanı motorlarına oradan Borland Database Engine (BDE) ve Database Desktop kullanımına değineceğim. Eğer tecrübeli bir veritabanı kullanıcısı iseniz bir bu makale dizisinin sonraki bölümünü okumanızı tavsiye ederim. Fakat anahtar,tablo ilişkileri,lookup,index terimleri ile problemleriniz varsa yada Database Desktop programını verimli kullanamadığınıza inanıyorsanız bu makaleyi okumalısınız.
Veri Tabanı Nedir?
Veritabanı; kısaca verilerin tutulduğu yer anlamına gelir. Fakat bu tanımdan kasıt verilerin tutulduğu bir dosya olmayabilir.Örneğin BDE bir veritabanını her bir dosyaya bir tablo gelecek şekilde ayırmıştır.Fakat Access için tek bir dosya söz konusudur.

Tablo:Düşünün ki bir miktar saklamak istediğiniz veriniz var. Bunlar:
Can,Kaynak,jankaynak@hotmail.com,Turkware Software Co.,Mustafa, Kapsal,mustafakapsal@turkware.com,Turkware Software Co. vs.
Eğer yukarıdaki verileri guruplamak istesek:
Soyadı Gurubu:Kaynak,Kapsal
Ad Gurubu:Can,Mustafa
Şirket Gurubu:Turkware Software Co.,Turkware Software Co.
E-Mail Gurubu:jankaynak@hotmail.com,mustafakapsal@turkware.com
Gördüğünüz gibi 4 ana başlık altında toplayabildim böylece daha düzenli oldular ve aradığımı çabuk bulabilecek hale getirdim.
Yani tablo haline getirdim. Tablonun anlamı aynı niteliği betimleyen verileri tek bir gurup altında toplamaktır.Bu guruplar benim tablomun sahalarıdır. Aşağıda yukarıdaki örnek bir tablo haline getirilmiştir.
Soyadı
Adı
Şirket
E-Mail
Kaynak
Can
Turkware Software Co.
jankaynak@hotmail.com
Kapsal
Mustafa
Turkware Software Co.
mustafakapsal@turkware.com
yukarıdaki tabloda Soyadı,Adı,Şirket,E-Mail adları sahalarımı tanımlayan isimleri oluşturdu. Dikkat! bu bahsettiğim Soyadı,Adı,Şirket,E-Mail sahaları tablomun sadece sahalarını tanımlar tablomun verilerine dahil değildir.
Her satır bir kayıtı tanımlar. Kayıt, Saha adlarına uygun olarak girilmiş verilere denir.
Tabloda Birincil Anahtar:Tablo; veri tabanının en önemli özelliğine uymalıdır.Tabloda tek olma. yani tüm sahaları aynı iki kayıt bir veritabanında bulunamaz. Bunun için Veritabanını sıralayan bir sahaya daha ihtiyaca vardır. Tabi ki her zaman ayrı bir saha olacak diye bir kaide yok ama eğer sahanızda hiç tekrarı mümkün olmayan bir sahanız yoksa yeni bir saha yaratmanız kaçınılmazdır.Biz bu sahayı birincil anahtar olarak niteleriz. Yukarıdaki örneğe bir birincil saha ekleyelim.
ID(*)
Soyadı
Adı
Şirket
E-Mail
1
Kaynak
Can
Turkware Software Co.
jankaynak@hotmail.com
2
Kapsal
Mustafa
Turkware Software Co.
mustafakapsal@turkware.com
yukarıdaki örnekte ID adında bir saha daha ekledim. Bu ID sahasını sıralama değişkeni olarak kullanacağım her eklediğim kayıt öncekilerden farklı bir sayı olacak. Böylece tabloda tek olama kuralını korumuş olacağım.
Yukarıda ID sahasının yanına parantez içinde bir yıldız koydum. Yıldız işareti o sahanı bir anahtar olduğunu belirtir.Bu yıldız tanımlaması tüm programcılar tarafından kullanılan bir standarttır.
Daha önce bahsettiğim gibi her zaman birincil anahtar eklemek için farklı bir saha kullanmayabiliriz. Bunu yerine basbaya e-mail sahasını da kullanabilirdim. Çünkü herkesin kendine ait bir e-maili olacağı için tabloda  tek olma kuralı yine korunmuş olur.
E-Mail(*)
Soyadı
Adı
Şirket
jankaynak@hotmail.com
Kaynak
Can
Turkware Software Co.
mustafakapsal@turkware.com
Kapsal
Mustafa
Turkware Software Co.
Tablolar arası ilişkiler:
Bazen bir veriyi topluluğunu tek bir tabloda tutmak mümkün olmayabilir. Bunun gerekçesi tek bir öğe için birden çok kaydın olmasıdır. Bunu şöyle açıklayabiliriz:
Mesela benim birden çok telefonum var.bunu iki şekilde tutabilirim. birincisi:
ID(*)
Soyadı
Adı
Birinci Telefon
İkinci Telefon
1
Kaynak
Can
555 45 44
555 45 45
2
Kapsal
Mustafa
555 73 67

yukarıdaki örnekteki gibi tutmak sağlıklı değildir. Çünkü eğer ben başka bir telefon sahibi daha olursam bunu nereye yazacağım. Bunun nihayi çözümü tablolara parçalamak olacaktır. Şöyle ki:

ID(*)
Soyadı
Adı
1
Kaynak
Can
2
Kapsal
Mustafa

Telefon
555 45 45
555 45 44
555 73 67
Gördüğünüz gibi yukarıdaki örnekteki gibi tanımlarsak iki ayrı tabloya ayırmış oluruz.Ama Telefon bilgilerini içeren tabloda bir şey eksik. Telefonları kime ait olduğu. Telefonların kime ait olduğunu belirten bir saha daha eklemeliyiz.Ekliyeceğimiz saha kişi bilgilerini içen tablodaki tekrarsız saha olmalı.Örneğimizi şu şekilde değiştiriyoruz.

ID(*)
Soyadı
Adı
1
Kaynak
Can
2
Kapsal
Mustafa

Telefon(*)
ID
555 45 45
1
555 45 44
1
555 73 67
2

Yukarıdaki örnekte gördüğünüz gibi telefon bilgilerini içeren tabloya eklediğimiz, kişi bilgilerini içeren tablodaki anahtar saha ile aynı niteliğe sahip saha;telefon bilgilerini kişi bilgileriyle eşleştirip anlaşılır bir kayıt kümesi oluşturdu.
İpucu: Eğer elinizde bir veri kümesi varsa ve hangilerinin hangi tabloda yer alacağına karar vermiyorsanız; şu yöntemi deneyin. Eğer bir kayıt için o saha birden çok bilgi içeriyorsa bu yeni bir tablodur.Bölün.
Eğer tabanınızda birkaç kayıt varsa veri bu işlemin işlerliliği fazladır.Fakat binlerce kayıtla uğraşıyorsanız bu tanımlarda size yetmeyebilir. Bu tabloların kendi kendine birbiri ile iletişim kurmasını istiyorsak ilişkilendirmeliyiz.
İlişkiler; bir veri tabanının içindeki tabloların birbiri ile aynı görevde olan sahalarının birbirine bağlanması şeklinde nitelendirilebilir.
İlişkiler ikiye ayrılır:
  • Bire-Çok ilişki
  • Bire-Bir ilişki
Bire-çok ilişki; bir tablodaki her bir veri için ilişkili tablodaki sahaya karşılık gelen birden çok veri varsa buna Bire-Çok ilişki denir.Örneğin Bir babaya karşılık iki çocuk varsa bu bire çok ilişkidir. Çünkü baba her ikisininde babasıdır.
Bire-Bir ilişki; Bir tablodaki her bir veri için diğer tablodaki sahaya karşılık gelen bir veri varsa buna Bire-Bir ilişki denir. Örneğin Bir kişinin bir saat takması gibi.
Bire-bir ilişkiler bir tablonun kendi sahaları arasındaki ilişkidir. Bire çok ilişkiler ise bir tablonun anahtar sahası ile başka bir tablonun aynı nitelikteki sahası ile ilişkisidir. Bu ilişkileri en iyi tasarlayabileceğiniz program MsAccess programıdır. Veritabanı uygulamalarında hiç faydalanmasanız bile sadece ilişkileri düzenleme ekranından faydalanabilirsiniz.Yandaki resim bire çok ilişkinin MSAccess programında nasıl görüntülendiğini açıklar.
Database Desktop
dbd.gif (7509 bytes)Database Desktop programı Delphi ile gelen bir programdır. Bu program yardımı ile tablolar ile ilgili her türlü işlemi yapabiliriz. Database Desktop pek çok veritabanı motorunu kullanmanıza izin verir.
Delphi kullanıcıları arasında en çok kullanılanı ise Paradox'tur. Çünkü Paradox büyük veri yapılarıyla çolayca başa çıkabilir. Bende bu yüzden şimdilik sadece Paradox kullanımını örnek göstererek Database Desktop'ı size anlatacağım.
Database Desktop'ta yeni bir tablo yaratmak için File/New/Table comutunu çalıştırmanız gerekiyor. Daha sonra karşınıza yandaki gibi bir ekran çıkacak buradan Paradox7'yi seçin.Eğer Daha önceki sürümleri kullanmak yada başka veritabanları kullanmak istiyorsanız yine buradan seçebilirsiniz ama ben Paradox7 ile örnekleyeceğim için Paradox7'yi seçmenizde fayda var.
Not:Paradox7 ve tüm Paradox sürümleri %100 güvenli değildirler. Şifreleme yaptığınızda bile eğer bir cracker Paradox supervisor şifrelerini biliyorsa kolaylıkla veritabanınızın içinde ne var diye bakabilir. Bunu önlemenin yolu Crypt ve DeCrypt yöntemeleri ile verilerinizi şifrelemektir.
dbdtableopt.gif (6691 bytes)OK tuşuna bastığınızda karşınıza yandaki menü gibi bir menü gelecek.Bu Menüde İlk olarak Field Name Type Size ve Key hücreleri olacak.
Field Name hücresine 25 karakter uzunluğunda Delphi değişken isimlendirme kurallarına uygun bir isim girmelisiniz.
Type Hücresi bir açılır menü şeklindedir. Menünün içeriği ve delphideki karşılığı:
  • Alpha (String)
  • Number(Float)
  • Money(Integer)
  • Short(ShortInt)
  • Long Integer(Integer)
  • #BCD(Double)
  • Date(DateTime)
  • Time(TDateTime)
  • @TimeStamp(TDateTime)
  • Memo(TMemo)
  • Formatted Memo(TRichEdit)
  • Graphic(TGraphic)
  • OLE(Tüm OLE Bileşenleri)
  • Logical(Boolean)
  • +AutoIncrement(Integer)
  • Binary(ikili veriler)
  • Bytes(Array of Char)

Alpha: Alpha tipi tüm yazdırılabilir karakterleri içerir.0-255 arasında boyutu olabilir. Delphi'de String tanımlı bir değişken tarafından kullanılabilir.
Number:Number tipi sadece pozitif/negatif işareti,ondalık işareti ve sayı içerebilir. Pozitif ve negatif ifadeler tutabilir.-10307den 10307'ye kadar değer alabilir.Delphi'de Float tanımlı bir değişken tarafından kullanılabilir.
Money:Money tipi tıpkı diğer tipler gibi sayı içerir fakat sadece gösterimi diğerlerinden farklıdır.Her üç hanede bir nokta ile ayrılır. fakat bu değerine etki etmez.Delphi'de Float tanımlı bir değişken tarafından kullanılabilir.
Short:Short Tipi -32,767'den   32,767'e kadar değer içerebilir.Delphi'de Integer tanımlı bir değişken tarafından kullanılabilir.
Long Integer:Long Integer tipi  -2147483648'den   2147483647'e kadar değer içerebilir.Delphi'de LongInt tanımlı bir değişken tarafından kullanılabilir.
BCD(Binary Coded Decimal):BCD tipi ikili codlanmış sayısal veri içerir.Diğer sayısal tiplerin sağladığından daha hassas  hesaplamalar yapmanız gerektiğinde BCD sahaları kullanın.Fakat hesaplamalar diğer veri tiplerinden daha yavaş olacaktır.
Date: Date tipi ile 1 Ocak  9999 M.Ö'dan  31 Aralık 9999 M.S'ye kadar ki tarihleri tutabilirsiniz.Tüm artık yılları düzgün bir şekilde tutar.  Delphi'de  TDateTime ile çevrimler sonucu kullanılabilir.
Time:Time tipi milisaniyeler halinde 24 saati adresler.Varsayılan saat tipini değiştirmek için Paradıx'u kullanmalısınız.  Delphi'de   TDateTime ile çevrimler sonucu kullanılabilir.
TimeStamp:TimeStamp tipi Time ve Date tiplerinde olan bütün özellikleri sağlayan birleşik bir tipdir.   Delphi'de  TDateTime ile çevrimler sonucu kullanılabilir.
Memo:Memo Tipi tüm yazdırılabilir ASCII kodları içerebilir (NULL dışında).Bu tip Mb uzantılı bir dosyanın içinde tutulur.Asıl tabloya bağlanır.Bu tipi delphide kullanmak için TMemo nesnesini kullanabilirsiniz.Boyut olarak 1MB dan 240 MB kadar bir boyut belirtebilirsiniz
Formatted Memo:Formatted Memo tipi bir Richeditin içerebileceği tüm içeriği sağlar.(renk,font,bold vs.).Tüm yazdırılabilir ASCII kodları içerebilir (NULL dışında).bu tip Mb uzantılı bir dosyanın içinde tutulur.Asıl tabloya bağlanır.Bu tipi Delphi'de kullanmak için TRichEdit nesnesini kullanabilirsiniz..Boyut olarak 1MB dan 240 MB kadar bir boyut belirtebilirsiniz
Graphic:Graphic tipi .BMP, .PCX, .TIF, .GIF, ve .EPS dosya formatlarını destekler. Bu dosya formatlarını BMP dosya formatınıa çevirip bu şekilde saklar.Graphic tipinin boyut tanımlamaya ihtiyacı yoktur çünkü tablodan farklı bir dosyada tutulurlar.Bu tipi Delphi'de kullanmak için TImage nesnesini kullanabilirsiniz.
OLE:OLE tipini her çeşit dosyayı tutmak için kullanabilirsiniz.OLE sahası bu tip verileri göstermek ve değiştirmek için bir yol sağlar.Fakat ne yazık ki Database Desktop bu içeriği gösteremez.OLE tipinin boyut tanımlamaya ihtiyacı yoktur çünkü tablodan farklı bir dosyada tutulurlar.Bu tipi Delphi'de kullanmak için OLE nesnesini kullanabilirsiniz.
Logical:Logical tipi TRUE yada FALSE tipinde iki değer tutabilir.Delphi'de Boolean tipi ile birlikte kullanabilirsiniz.
AutoIncrement:AutoIncrement tipi sürekli artan bir sayıyı ifade eder her kayıt eklendiğinde sahanın değeri bir artar. Böylece tekrarsız kayıtları oluşturulmuş olur. Genellikle Birincil Anahtar olarak kullanılır.Delphi'de LongInt tipi ile birlikte kullanabilirsiniz.
Binary:Binary tipi diğer tiplerle tutulamıyacak olan verilerin (genellikle kullanıcı tanımlı verilerin) tutulması için kullanılır tüm ASCII tabloyu kullanabilir.Bu tip Mb uzantılı bir dosyanın içinde tutulur.Asıl tabloya bağlanır.
Bytes:Bytes tipi genellikle  Barkod yada manyetik şeritleri tutmak için kullanılır.Bu tip Mb uzantılı bir dosyanın içinde tutulur.Asıl tabloya bağlanır.
Size hücresine hangi veriyi girmişseniz o veri ile ilgili boyutu girmelisiniz. tanımlama ekranının alt kısmında bu konuda bilgi vermektedir.
Key hücresi Anahtar saha olup olmadığını denetler. Eğer bu sahanın üzerini çift tıklarsanız o sahayı Anahtar saha yapmış olursunuz.

xxxxxx