| Son Güncellenme Tarihi : 30 Haziran 2000
Yazan:Can Kaynak |
|
Veri Tabanı Uygulamaları 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
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.
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.
Yarın Database Desktop Tablo özellikleri |