VERİTABANI TASARIMI
1- VERİTABANI TASARIMI VE TANIMI
Oluşturulan kısa yol üzerinde mouse’un sol tuşu ile çift tıklatılarak program çalıştırılır. Daha öncede bahsedildiği gibi prowin32.exe sonuna yazılan “–p _desk.p” ifadesi ile kısa yol çalıştırıldığında Progress desktop penceresi ekrana gelir.
Progress Desktop penceresinde yer alan 6 simgeden, üçünü açıklayalım, bu simgelere tools menüsünden de ulaşmak mümkündür.
Data Dictionary:
Veritabanımızın tasarımını ve tanımının yapılacağı simgedir (veritabanının yapısına buradan bakılabilir). Burada yapılabilen işlemler; yeni veritabanı (database) yaratma, tablolar (tables) oluşturma, bilgi alanları (fields) oluşturma ve tablolara indexler oluşturma işlemleri yapılabilmektedir.
Data Dictionary butonuna basıldığı anda, ekrana gelen “Dictionary Startup” penceresinde; varolan veritabanına bağlantı (Connect to an Existing Database), yeni bir veritabanı yaratma (Create a New Database) ve hiçbir veritabanını seçmeden devam (Continue with No Database) seçenekleri sunulur, burada yeni bir veritabanı yaratma (Create a New Database) seçimi yapılarak “OK” butonuna basılır.
Create Database penceresinde veritabanının ismi “ogrenci” olarak girilir,
Start with:
An Empty Database : Boş veritabanı.
A copy of the Sports Dat. : Spor veritabanının kopyasını oluşturur.
A copy of Some Other Dat.: Diğer veritabanı (isim verebileceğiniz) seçilerek kopyasını oluşturur.
Burada boş veritabanı seçilerek “Ok” butonuna basıldığında ogrenci veritabanı oluşturulmuştur.
Oluşturulan “ogrenci” veritabanına o anda bağlanılması için “Connect Database” ekranında “Ok” tuşuna basılarak bağlantı kurulur.
Bağlantı kurulduktan sonra Data Dictionary penceresi gelecektir.
Burada şimdilik iki liste yer almaktadır. Birincisi veritabanlarının, diğeri tabloların listesidir (Data Dictionary başlıklı pencere).
O zaman yeni bir kavram daha ortaya çıkmaktadır o da tablo kavramıdır. Veritabanı en az bir tablodan oluşmalıdır. Dersimizin daha iyi anlaşılması için, fakültenin öğrenci işleri ile açıklayalım;
Öğrenci İşleri’nde
Öğrencilerin özlük bilgileri (ozluk)
Numarası, adı, soyadı, doğum tarihi, sınıfı gibi bilgiler
Okutulacak ders bilgileri (ders)
Dersin kodu, adı, kredisi, dersi veren öğretim elemanı
Öğrencilerin, okutulan derslerden seçmiş olduğu ders bilgileri (notlar)
Öğrencinin numarası, dersin kodu, dönemi, şubesi, vize, final, basari notu gibi bilgiler tutulmalıdır.
Bilgi tutulması için 3 tane yapı oluşturulmuştur. Bu yapılara tablo denilmektedir. 3 tablo yerine tek tabloda da bilgiler tutulabilirdi. Fakat bilgi tekrarının önlenmesi, bilgilere hızlı erişim gibi nedenlerden dolayı birkaç tablo yapısı tercih edilmelidir. Tek tablo olsa idi şöyle bir yapı olmalıydı;
Numara |
Adı |
Soyadı |
D.Kodu |
D.adı |
Vize |
final |
91050099 |
Yahya |
Demircan |
A308 |
Progress 8.A |
30 |
60 |
91050099 |
Yahya |
Demircan |
A211 |
G.Astronomi |
50 |
70 |
92050002 |
Banu |
Demirel |
A308 |
Progress 8 |
45 |
80 |
92050002 |
Banu |
Demirel |
A211 |
G.Ast. |
50 |
90 |
92050002 |
Banu |
Demirel |
A308 |
Progress |
40 |
80 |
93050005 |
Muhittin |
Altınkaya |
A308 |
Progress 8. |
50 |
80 |
Bu tabloya bakılırsa, aynı dersi alan öğrenciler için ders isimleri tekrar tekrar girilmiş, ders isimleri farklı girilmiş, bir öğrenci 20 ders alacaksa her defasında öğrencinin adı soyadı bilgileri girilmek zorunda kalınmıştır, bu bilgiler yanlış girilmiş ve bilgiler tekrar edilmiştir.
Bunun yerine, mantık ölçüsünde en küçük tablolar halinde bilgiler tutulursa veritabanı mantığına uyulmuş olacak, kullanıcıların da daha az iş ve daha doğru çalışılması sağlanacaktır.
Örnek Veritabanı yapısı:
Çok sayıdaki tabloların birbiriyle çalışması olayına ilişkili (bağlantılı) veritabanı denilmektedir. İlişkili çalışabilmesi için tabloların ortak bilgi alanlarından oluşması gerekir. Oluşturacağımız tablolar;
Tablo: Ozluk |
|
|
Bilgi Alanı Adı (Field Name ) |
Alan Tipi(Data Type) |
Biçimi(Format) |
Ogr_No |
char |
X(8) |
Adi |
char |
X(15) |
Soyadi |
char |
X(15) |
Sinifi |
inte |
9 |
D_Tarihi |
date |
99/99/9999 |
Cinsiyeti |
char |
X(1) |
Ilce_Kodu |
char |
X(4) |
Harc_Kredi |
logi |
yes/no |
Adres |
char[3] |
X(30) |
|
|
|
Tablo |
|
|
Bilgi Alanı Adı (Field Name ) |
Alan Tipi(Data Type) |
Biçimi(Format) |
Kodu |
Char |
X(6) |
Ders_Adi |
Char |
X(30) |
Kredi |
Decimal-2 |
>9,9 |
Sicil_No |
Char |
X(5) |
Donem |
Char |
9999-99/9 |
|
|
|
Tablo: Notlar |
|
|
Bilgi Alanı Adı (Field Name ) |
Alan Tipi(Data Type) |
Biçimi(Format) |
Ogr_No |
Char |
X(8 |
Kodu |
Char |
X(6 |
Donem |
Char |
9999-99/9 |
Sube |
Char |
X(1) |
Vize |
Integer |
>>9 |
Final |
Integer |
>>9 |
Basari |
Integer |
>>9 |
|
|
|
Tablo :Ilce |
|
|
Bilgi Alanı Adı (Field Name ) |
Alan Tipi(Data Type) |
Biçimi(Format) |
Ilce_Kodu |
Char |
X(4) |
Ilce_Adi |
Char |
X(25) |
|
|
|
Tablo :Ogretmen |
|
|
Bilgi Alanı Adı (Field Name ) |
Alan Tipi(Data Type) |
Biçimi(Format) |
Sicil_No |
Char |
X(5) |
Ogretmen_Adi |
Char |
X(15) |
Ogretmen_Soyadi |
Char |
X(15) |
Unvan |
Char |
X(1) |
Burada bilgi girilecek yerlere alan (field) denilmektedir, bilginin çeşidine alan tipi (data type), ne kadar yer ve nasıl girilmesi gerektiği ise biçimi (boyut) olarak tanımlanmaktadır.
Bu tablolara gerekli diğer alanlar da eklenebilir.
Alan tipleri : Character, integer, decimal, logical, date ve diğerlerdir.
Biçim (Boyut) ise bir alanın, character (klavyede yer alan bütün işaretler harf, sayı, simge), integer (sayı), decimal (ondalıklı sayı) gibi tiplerden oluşuyorsa o alana girilecek bilginin karakter sayısı ve giriliş biçimini gösterir.
Ozluk Tablosu Ogr_no Ilce_kodu |
|
|
|
Ders Tablosu Kodu Donemi Sicil_No |
|
|
Notlar Tablosu Ogr_no Kodu Donemi |
|
|
Ilce Tablosu Ilce_kodu |
|
|
|
Ogretmen Tablosu Sicil_No |
Dikkat edilirse beş tablo da birbirleriyle aynı olan alanları içermektedir. Ozluk ile Notlar tabloları, öğrencinin numarası (ogr_no) ile bağlantılı, Ders ile Notlar tabloları da, dersin kodu ve donemi ile bağlantılı hale getirilmiştir. Ozluk tablosu, Ilce tablosuyla Ilce_kodu, Ders tablosu Ogretmen tablosunda Sicil_No bilgi alanıyla ilişkilendirilmiştir. Bağlantı kurulabilmesi için alan isimlerinin aynı ve içerdiği bilginin de aynı olması gerekmektedir. İçeriği aynı, fakat alan ismi farklı olduğu taktirde bağlantı kurmakta güçlük çekilmektedir. Aynı olduğunda Progress ilişkiyi otomatik kuruyor, farklı olduğunda bunu 4GL kodlarıyla ilişkilendirilmesi gerekmektedir.
Tablo Oluşturma:
Artık tablolar ve tabloları oluşturan alanların tanımlanmasına geçilebilir. Data Dictionary ekranında,
Butonlardan hangisi seçili ise (Tables seçili) ekranın altında yer alan (Create Table, Table Properties ve Delete Table) üç buton da yukarıda seçili simgelerle ilgili işleri yapar. Tablo butonu seçili olduğundan; Yeni Tablo (Create Table), Tablo özellikleri (Table Properties) ve Tablo sil (Delete Table) butonları yer alır.
Burada yeni tablo butonuna basılmak suretiyle ozluk tablosunu oluşturmaya başlanırsa, karşınıza aşağıdaki ekran çıkacaktır.
Bu pencerede sadece Table Name alanına ozluk yazıp Ok butonuna basılırsa, tablo oluşturulmuş olur ve direkt aşağıdaki Bilgi Alanı oluşturma penceresi gelir. Bu pencereden hemen alanları tanımlamaya geçilebilir veya vazgeç (Cancel) tuşuna basılarak çıkılır. Şimdi vazgeç butonuna basarak alan oluşturma penceresinden çıkalım. Data Dictionary ekranında yer alan butonlara ilave olarak fields ve indexes butonları gelmektedir.
|
|
Alan Oluşturma:
Yukarıdaki pencerede “Field” butonuna basılırsa Data Dictionary penceresinde Create Field, Fields Properties ve Delete Field butonları yer alacaktır. Bu butonlardan Create Field butonuna basılırsa aşağıdaki Bilgi alanı oluşturma penceresi gelecektir.
Bu pencerede Ozluk tablosunun alanlarını oluşturmaya başlayalım. Yukarıdaki pencerede;
Field Name : Ogr_no
Data Type : Character
Format : x(8)
Label : Öğrenci No (daha sonra formlar da kullanılmak üzere)
Column label : Öğrenci No (Listeleme, browse ekranlarında kullanma üzere)
alanlarını doldurup Create butonuna basarak, adi alanının tanımına geçilebilir veya Ok butonuyla (saklayıp) çıkılabilir. Tekrar alan oluşturmak için Create Field butonu kullanılır. Bu şekilde ozluk tablosunun bütün alanları tanımlanır. Aynı şekilde ders, notlar, ilce ve ogretmen tablolarının ve bu tablolara ait alanların tanımı yapılabilir.
Veritabanında bilgiye hızlı erişebilmek için verilerin sıralı olması gerekir. Bu sıralama da veritabanını indeksleyerek sağlanır. İlişkili veritabanında mutlaka verilerin index’li olması gerekir.
İndeks oluşturma
İndex, Data Dictionary penceresinde yer alan “indexes” butonuna basarak oluşturulur. Bu butona basıldığı anda Data Dictionary penceresi aşağıdaki şekilde görüntülenir.
Bu pencerede üç tane liste görüntülenir. Veritabanları (Databases) listesi, tablolar (Tables) listesi ve indeksler (Indexes) listesi yer alır. Burada indexler listesinde varsayılan (default) olarak (varsayılan indeksi olarak) bir indeks yer alır, bu default indeks her tabloda oluşturulan kayıtlar “Kayıt sırasında” kayıt numaralarına göre sıralı ve her kayıt numarasına göre kayıtlar birer tanedir.
Önce hangi tabloya index oluşturulacaksa tablolar listesinden o tablo seçilir. İndex yarat (Create İndex) butonuna basılır ve aşağıdaki pencere ekrana gelir. Öncelikle Ozluk tablosunu seçerek indeks yarat butonuna basılsın,
Bu pencerede;
Index_Name :Oluşturulacak indekse bir isim verilir,
Primary :Birincil indeks demektir (bir tabloda bir
tane olabilir)
Active :İndeksin devamlı açık olması
Unique :Seçilen alanları içeren bilginin tek olması
Ascending/Descending :Artan veya azalan sırada olacağını ifade
eder.
Sıralamamızı öğrencinin numarasına göre yapacağımıza göre soldaki listeden ogr_no üzerine çift tıklayarak veya “Add>>” butonuna basarak sağdaki listeye taşınır. Öğrenci numarası her öğrenci için tek olduğundan Unique işaretlenir, (uygulamanın kullanılmasıda aynı numaraya ait bir öğrenci eklenmeye çalışıldığında Progress otomatik olarak uyarır, bu numaraya ait başka kayıt var mesajını İngilizce verecektir). Ok butonuna basarak ozluk tablosunun indeksi oluşturulmuş olacaktır.
Ders tablosunda da kodu ve donemi bilgi alanlarına göre (Primary, unique, active) indeks oluşturulur.
Notlar tablosuna da ogr_no, kodu ve donemi sağ tarafa taşınmalı ve indeks (Primary, unique, active) oluşturulmalıdır. Burada numarası, kodu ve donemi aynı olan kayıt olmamalıdır.
Bunu örnekle açıklayalım;
91050099 nolu öğrenci 1999-00/2 döneminde A308 dersini bir kez alabilir, aşağıda iki kez almış görünüyor,
Ogr_No Kodu Donemi
91050099 A308 1999-00/2
91050099 A308 1999-00/2
92050002 A308 1999-00/2
İndeks tanımına göre numarası, kodu ve dönemi aynı olan iki kayıt olamaz, burada ilk iki kayıt aynı, indeks oluşturulurken unique işaretlenirse aynı olan kayıtlar veritabanına kaydedilemez, ama işaretlenmezse benzeri iki kaydın olması muhtemeldir.
Ogretmen tablosu Sicil_No alanına göre (Primary, unique), ılce tablosu da Ilce_kodu'na göre (Primary, unique) olacak şekilde indekslenmelidir.
Tablolar arasında ilişki kurulabilmesi için tabloların aynı alanlara göre indeksli olması yararlı olacak ve hızlı erişim sağlayacaktır.
Buraya kadar yapılanlar bir veritabanı oluşturma, veritabanına ait tabloları, bilgi alanlarını ve indeksleri oluşturma aşamasıydı. Bu işlemler bir kez yapıldı ve artık oluşturulan veritabanına bilgilerin girilmesi işlemleri kalmıştır.