Veritabanı Uygulamaları geliştirmek makale dizisinin bu bölümünde Paradox'un tablo özelliklerininin kullanımına değineceğim. Bu Bölümde saha geçerlilik kurallarının tanımlanması,Table lookup,secondary indexes(ikincil anahtarlar),referantial Integrity(tablo ilişkileri),Şifre güvenliği ve Tablo dilinin ayarlanması konularıolacak.Bu bölümü her Delphi programcısının en a zbir kez okumasını tavsiye ederim çünkü mutlaka benim analttığım ve sizin kullanırken gözünüzden kaçırdığınız birkaç ayrıntı olabilir.
A) Sahaların Geçerlilik Kuralları:
1. Required Field: Tabloya giriş esnasında kullanıcı sahayı atladığında hata vermesini sağlar.Böylece kullanıcını hiç bir şekilde bu sahayı boş geçmemesini sağlarız.
2. Minimum Value:Sahanın tip tanımlamasına uygun bir şekilde sahanın alabileceği minimum değeri içerir. Örneğin bir sepetteki elma sayısı asla eksili bir değer olamaz. Bunun için minimum değerine 0 atamalıyız.
3. Maximum Value:Sahanın tip tanımlamasına uygun bir şekilde sahanın alabileceği maximum değeri içerir.Örneğin iskambik kağıdı no'su tutan bir saha için iskambil kağıdı sayısı 52'den fazla olamaz.olursa hile var demektir :)
4. Default Value:Bu sahanın varsayılan değeridir. Minimum ile maximum değerleri arasında bir değer almalıdır.
5. Picture: Bu sahanın görünüm ve giriş şeklidir.Bu özelliği kullanarak sahanıza yapılan girişin sizin belirlediğiniz kurallara uygun olup olmadığını hiç bir kod yazmadan kontrol edebilirsiniz.
chr
|
Anlamı
|
#
|
Sayısal değer
|
?
|
Herhangi bir yazı karakteri (büyük yada küçük)
|
&
|
Herhangi bir yazı karakteri (büyüğe dönüşür)
|
~
|
Herhangi bir yazı karakteri (küçüğe dönüşür)
|
@
|
Herhangi bir karakter
|
!
|
Herhangi bir yazı karakteri (büyüğe dönüşür)
|
;
|
Kendinden sonra gelen karakterin kendisini yazdırır.
|
*
|
izleyen karakteri herhangi bir sayı kadar tekrar eder
|
[abc]
|
a,b veya c Seçimlik karakterleri
|
{a,b,c}
|
a,b veya c Seçimlik karakterleri
|
Örnekler:
Picture
|
Açıklama
|
Örnek
|
#&#&#&
|
Canada posta kodu
|
1A2B3C
|
#####[-####]
|
Amerika posta kodu
|
12345 yada 12345-6789
|
*8{!}.*{3}
|
MS-DOS için dosya adı
|
Girilen bütün karakterler büyük harf olur.
|
{Yes,No}
|
Evet yada hayır
| |
[(0*3{#})] *3{#} *2{#} *2{#}
|
Türkiye Telefon Numarası
|
555 45 45 yada (0232) 555 45 45
|
(05{3,4}{2,5}) *3{#} *2{#} *2{#}
|
Cep Telefon Numarası
|
Tüm cep telefon numaraları bu kodlama ile yazılabilir.
|
Örneklere bakarak sizde kendi giriş formüllerinizi yazabilirsiniz.Bunun için önce yukarıdaki resimde gördüğünüz Assist düğmesine basarak yandaki resimde olduğu gibi bir ekran çıkaracaksınız. Daha sonra picture yazan metin kutusuna düşündüğünüz formatı yazacaksınız. Doğru olup olmadığını test etmek istiyorsanız Verify Syntax düğmesine basmalısınız.
Eğer yazdığınız formatı denemek istiyorsanız Sample Value metin kutusuna formatta belirttiğiniz şekilde bir veri girmelisiniz. Eğer girdiğniz verinin formata uygun girilip girilmediğini merak ediyorsanız Test Value düğmesine basın.Eğer Value is Valid mesajını görürseniz girdiğiniz veri hazırladığınız formata uygun demektir.
Hazırladığınız bu formatı kaydetmek için add to list düğmesine basmalısınız.
Eğer listedeki bir format kullanmak istiyorsanız formatı seçip Use düğmesine basmalısınız.
Eğer yazdığınız formatı denemek istiyorsanız Sample Value metin kutusuna formatta belirttiğiniz şekilde bir veri girmelisiniz. Eğer girdiğniz verinin formata uygun girilip girilmediğini merak ediyorsanız Test Value düğmesine basın.Eğer Value is Valid mesajını görürseniz girdiğiniz veri hazırladığınız formata uygun demektir.
Hazırladığınız bu formatı kaydetmek için add to list düğmesine basmalısınız.
Eğer listedeki bir format kullanmak istiyorsanız formatı seçip Use düğmesine basmalısınız.
B) Table Lookup:
Table lookup tanımlamak için Table Properties combo kutusundan table look up seçeneğini seçip define düğmesine basmalısınız.
Karşınıza yandaki gibi bir ekran çıkacak. Burada sağda tanımlı olan sizin şu anda üzerinde çalışmakta olduğunuz ve look up tanımlayacak olduğunuz tablodur. Buradan hangi sahayı look up saha olarak tanımlamak istiyorsanız o sahayı liste kutusundan seçip FieldName metin kutusunun solundaki düğmeye basarak metin kutusuna atamalısınız.
Soldaki sahada seçilen aliasın içerdiği tabloları görüyorsunuz. Bu tablolardan look up yapmaya uygun bir tanasini seçip look up field metin kutusunun sağındaki düğmeye tıklayarak metin kutusuna atamalısınız. Burada dikkat edeceğiniz hususFieldName ile LookUp field sahalarının tiplerinin birbirine uyması. aksi taktirde hata verecektir. Unutmayın ki lookup tablonun hep ilk satırı lookup field metin kutusuna gelir.Eğer Lookup tablosu olarak kullanacağınınz tablonun ilk sahası anahtar saha olursa bu lookup yapma işlemini hızlandırır.
1. Look up Type
o Just Current Field: Sadece Tanımlanan saha look up dan gelen bilgiler tarafından doldurulur.
o All Corresponding Fields:Sadece tanımlanan look up saha değil look up tabloda bulunan ve lookup saha içeren tablonun tipleri ve adları uyan sahalarına da varsayılan değerleri atar. Örneğin içinde soyadı ve adı bulunan bir tablodan lookup yaptığımızı düşünelim. Eğer lookup yapan tabloda soyadı ve adı sahaları varsa mutlaka bu iki değeri doldurulur.
2. Look up Access
o Fill No Help: Sahaya bir veri girerken yardımcı olmaz.
o Help And Fill:Sahaya veri girerken yadımcı olur.
C) Secondary Indexes:
İkincil indeks, kayıtlar arası aramaları hızlandırmak yada farklı bir sıralama kuralına göre kayıtları dizmek için tanımlanır. İkincil indeksi bir sahadan yaratabileceğiniz gibi birden çok sahanın bir kombinasyonu olarakta yaratabilirsiniz.Not olarakikincil indeks ile sadece bir kaydın sıralama kuralını değiştirebilirsiniz. Onun fiziksel sırasını değil.
ikincil Indeks tanımlamak için Table Properties combo kutusundan table Secondary Indexes seçeneğini seçip define düğmesine basmalısınız.
Yandaki ekran gibi bir ekran karşınıza çıkacak.Sağ tarafta üzerinde değişiklik yaptığınız tablonun sahaları görünmekte. Buradan birini yada birkaçını seçerek sağ ok düğmesine basarak Indexed Fields liste kutusuna ekleyebilirsiniz.
Alttaki change order adıyla tanımlanan düğmeleri kullanarak sahaların indekslenme sırasını değiştirebilirsiniz.
Index option grup kutusunda ise 4 özellik tanımlanmış.Bunlar:
Alttaki change order adıyla tanımlanan düğmeleri kullanarak sahaların indekslenme sırasını değiştirebilirsiniz.
Index option grup kutusunda ise 4 özellik tanımlanmış.Bunlar:
- Uniquie:İkincil indekste birden fazla kaydın aynı değeri içerip içeremeyeceğini belirtir.Eğer Uniquie işaretli ise ve Database Desktop tekrarlı bir kayda rastlarsa indeks uygulanmaz ve bir hata mesajı görüntülenir.Sahanın verisini değiştirip tekrar indekslemeye çalışabilirsiniz.
- Descending:İkincil indeksin azalan yönde mi yoksa artan yönde mi sıralanacağını belirtir.Eğer işaretli değilse azalandan artana doğrudur.
- Case Sensitive:Sıralamada büyük yada küçük harf oluşuna dikkat edilip edilmeyeceğini belirtir.
Eğer işaretliyse veri şu sırada konumlanır:
Abcd, aBcd, aaaa
Eğer işaretli değilse şu sırada konumlanır:
aaaa, Abcd, aBcd
Database Desktop tek sahaları,büyük küçük harf duyarlı indeksleri otomatik isimlendirir.Eğer büyük küçük harf duyarlılığı olmayan bir indeks kaydedecekseniz kaydederken bir isim vermelisiniz. Bu size büyük küçük harf duyarlılığı olan ve olmayan, aynı sahalara sahip, iki farklı indeks tanımlamanızı sağlar.
Abcd, aBcd, aaaa
Eğer işaretli değilse şu sırada konumlanır:
aaaa, Abcd, aBcd
Database Desktop tek sahaları,büyük küçük harf duyarlı indeksleri otomatik isimlendirir.Eğer büyük küçük harf duyarlılığı olmayan bir indeks kaydedecekseniz kaydederken bir isim vermelisiniz. Bu size büyük küçük harf duyarlılığı olan ve olmayan, aynı sahalara sahip, iki farklı indeks tanımlamanızı sağlar.
- Maintained:İkincil indeksin korunup korunmayacağını belirtir.
Maintained indeksler her tablo değişikliğinde tekrar kaydedilir. Bu Sorgular gibi işlemleri hızlandırır.Maintain indeksler anahtar içeren tablolarda geçerlidir.Maintain olmayan indeksler sadece indeks kullanılırken güncellenir.Örneğin bir tabloya bağladığınızda yada bir sorguyu çalıştırdığınızda.
Bir maintain olmayan indeksi kullanan bir işlem yaptığınızda bu işlem diğerinden biraz daha uzun sürer. Çünkü ilk önce indeks tablonun değişen verilerine göre yeniden düzenlenip indeks kurallarını yeniden sıralanacaktır.Her halukarda eğer bir maintain olmayan indeks kullanmak isitiyorsanız değişmeyen bir tabloda kullanının.Mesela sadece okunabilir tablolarda maintained olmayan indeksler daha hızlıdır.
D) Referantial Integrity:
Referantial integrity tablolar arası ilişkileri tanımlar.tabloar arası ilişkilerin nasıl tanımlanacağı ve neden tanımlanması gerektiği bir önceki makalede ayrıntıları ile verilmiştir.Tablolar arası ilişkileri tanımlamak için Table Properties combo kutusundan Referantial Integrity seçeneğini seçip define düğmesine basmalısınız.
Yukarıdaki resimde gibi referantial integrity menüsü çıkacak. Fields liste kutusundan seçeceğimiz saha ile ilişkilendirmeyi düşündüğümüz tabloyu seçip table liste kutusunun yan tarafındaki düğmeye tıklamalıyız.yukarıdaki resimin sağ tarafında, üzerinde çalışmakta olduğumuz tablonun sahaları var.Bu sahalardan hangisini seçtiğimiz tablonun anahtar sahası ile ilişkilendirmek istiyorsak o sahayı seçmeliyiz. Böylece iki sahayı birbiri ile ilişkilendirmiş oluruz.
Update Rule:
- Cascade:Eğer ana tabloda herhangi bir değişiklik olursa bu direk bağlı tabloya yansır.
- Prohibit:Eğer ana tablodan bir veri silinecekse bağlı tabloda da bu veri kullanılmışsa silinmesine izin verilmez.
Strict Referantial integrity:Eğer bu işaretli ise; bu tablonun daha önceki paradox sürümleri tarafından kullanımı esnasında tablo ilişkisinin bozulmamasını sağlar.
E) Password Security:
Tablonuzun başkası tarafından görülmemesini istiyorsanız bir şifre belirtmelisiniz.(En azından Supervisor password'u bilmeyen biri tarafından).Bunun için Table Properties combo kutusundan Password Security seçeneğini seçip define düğmesine basmalısınız.
Karşınıza yandaki gibi bir ekran gelecek. Buradan bir şifre belirtebilirsiniz.Eğer Auxiliary Passwords düğmesine tıklayacak olursanız karşınıza aşağıdaki gibi bir ekran çıkacak. Bu ekrandan ilişkisel şifreler belirtebilirsiniz. Bu şekilde bir kişinin o tablo üzerindeki otoritesini de belirmiş olursunuz.
Not: Buraya belirteceğiniz şifre Ana şifreden mutlaka farklı olmalıdır aksi taktirde buraya şifre belirtmenin hiç bir anlamı yoktur. Tüm işlemler için aynı şifreyi belirtebileceğiniz gibi her işlem için ayrı ayrı şifreler de belirtebilirsiniz.Bunu new tuşu ile yeni bir şifre açıp şifreleyeceğniz sahaları seçip saha operasyonunu seçip şifrenizi girdikten sonra add düğmesine basmanız yeterli olacaktır.
Not: Buraya belirteceğiniz şifre Ana şifreden mutlaka farklı olmalıdır aksi taktirde buraya şifre belirtmenin hiç bir anlamı yoktur. Tüm işlemler için aynı şifreyi belirtebileceğiniz gibi her işlem için ayrı ayrı şifreler de belirtebilirsiniz.Bunu new tuşu ile yeni bir şifre açıp şifreleyeceğniz sahaları seçip saha operasyonunu seçip şifrenizi girdikten sonra add düğmesine basmanız yeterli olacaktır.
Buradaki operrasyonlar:
Eklemek ve silmek,Sadece veri girmek, güncellemek,sadece okumak ve tüm işlemleri yapabilmek olarak sınıflandırılmıştır.
Not:Eğer gerçekten veri güvenliğine ihtiyacınız varsa Crypt veDeCrypt metotlarını kullanın.
F) Table Language:
Table Language kısaca tablonun dilini belirleyeceğiniz bölümdür.Standart olarak tablonun dili ingilizceye uygun bir kod sayfasıdır. Eğer Türkçe bir kod sayfası kullanmak istiyorsanız.Aşağıdakilerden birini kullanabilirsiniz.
- Base Trk cp857
- Paradox Turk
- Pdox ANSI Turkish
Unutmamanız gereken asıl şey Türkçe büyük harfin küçük harfe yada küçük harfin büyük harfe çevrilirken yaşayacağınız problem.Bu tüm Database Desktop elemanları için geçerli bir sorundur. Büyük İ çevrilirken i ye çevrileceğine kod sayfasnıa göre farklı bir karaktere çevrilir. aynı şekilde I ise küçük ı ya çevrileceğine i'ye çevrilir. Bu bir fonksiyonla düzeltebilirsiniz.