FE ENDÜ GAZİ EN BİLİM ÜSTRİ MÜ BİLG VERİ

advertisement
GAZİ ÜNİVER
RSİTESİ
FE
EN BİLİM
MLERİ ENSTİTÜ
E
ÜSÜ
ENDÜ
ÜSTRİ MÜ
ÜHENDİS
SLİĞİ BÖ
ÖLÜMÜ
BİLG
Gİ SİSTEM
MLERİ
VERİ TA
ABANI YÖNETİM
Y
Mİ
Haazırlayanlar :
21220032
Erkan
n KARAA
ARSLAN
AR
RALIK 2002
2
1
VERİ TABANI................................................................................................ 5
1 Veri Tabanı Sistemlerine Giriş ........................................................ 5
1.1 Giriş.................................................................................................................... 5
1.2 Veri Tipleri......................................................................................................... 8
1.3 VTYS’nin Kullanım Nedenleri .......................................................................... 9
1.4 Veri Tabanları Konusunu Niçin Çalışmalıyız? ................................................ 10
1.5 Veri Modeli ve Sınıflandırılması ..................................................................... 11
1.6 Veri Tabanı Tanımı (Şema) ............................................................................. 11
1.7 Veri Tabanı Dilleri ........................................................................................... 13
1.8 Veri Tabanı Sistemi Ortamı ............................................................................. 15
1.9 VTYS'lerin Sınıflandırılması ........................................................................... 16
1.9.1 Veri Modeline Göre .................................................................................. 16
1.9.2 Kullanıcı Sayısına Göre ............................................................................ 17
1.9.3 Yer Sayısına Göre ..................................................................................... 17
1.9.4 Genel Amaçlı ve Özel Amaçlı Olmalarına Göre ...................................... 17
2. Veri Tabanları İçin Kavramsal Modelleme ....................................................... 18
2.1 Kavramsal Tasarım .......................................................................................... 18
2.2 ER Modelinin Kavramları................................................................................ 18
2.3 ER Modelde İlişki Tipleri ................................................................................ 20
2.3.1 Nesne tipleri arasındaki ilişki tipleri ......................................................... 20
2.3.2 Nitelikler arasındaki ilişki tipleri .............................................................. 21
2.4 ER Modelde Kısıtlar ........................................................................................ 21
2.5 ER Modele Örnek ............................................................................................ 22
2.6 ER Diyagramında IS-A Hiyerarşisi ................................................................. 24
3. Fiziksel Veri Tabanı Modellemesi ..................................................................... 25
3.1 Fiziksel Veri Tabanına Giriş ............................................................................ 25
3.1.1 Genel Bilgiler ............................................................................................ 25
3.1.2 Fiziksel Veri Tabanı Tasarımı .................................................................. 27
3.1.3 Kayıtların Kütükleri .................................................................................. 30
3.2 Fiziksel Veri Tabanında Dizinleme ................................................................. 32
3.2.1 Kütük Organizasyonları ............................................................................ 32
3.2.2 Dağıtım (Hashing) Teknikleri ................................................................... 32
3.2.2.1. Dışsal (External) Dağıtım ..................................................................... 33
2
3.2.2.2. Dinamik Dağıtım Yapısı ....................................................................... 34
3.2.2.3. Genişleyebilir Dağıtım Yapısı .............................................................. 35
3.2.3 Dizinleme (Indexing) ................................................................................ 36
3.2.4 B+_Ağaç Yapısı ........................................................................................ 38
3.2.4.1. B+_Ağaç Veri Yapısında Bir Verinin Girişi......................................... 39
3.2.4.2. Verilerin B+_Ağacından Silinmesi ....................................................... 39
4 İlişkisel Veri Modelleme..................................................................................... 41
4.1 İlişkisel Veri Modeli ........................................................................................ 41
4.1.1 İlişkisel Veri Modeli - Tanımlar ............................................................... 41
4.1.2 İlişkilerde Güncelleme İşlemleri ............................................................... 42
4.2 İşleme (Manipulation) İşlemleri (İlişkisel Cebir İşlemleri) ............................. 43
4.2.1 Seçme Operasyonu.................................................................................... 44
4.2.2 Projeksiyon Operasyonu: .......................................................................... 44
4.2.3 Kartezyen Çarpımı: ................................................................................... 45
4.2.4 Birleştirme Operasyonu (JOIN) ................................................................ 45
4.2.5 Toplama (U), Kesiştirme ( ) ve Küme-Çıkarma (-) Operasyonları ........ 47
4.2.6 Bölme (/) ................................................................................................... 47
4.2.7 Dışsal Birleşme ......................................................................................... 49
4.3 Bir İlişkinin Anahtar Nitelikleri ....................................................................... 49
4.4 Bir İlişkisel Veritabanı Şemasındaki Bütünlük Kısıtlamaları.......................... 50
5 VTYS Dili ........................................................................................................... 52
5.1 SQL (Structured Query Language - Yapısal Sorgu Dili)................................. 52
5.2 Kavramsal Değerlendirme Stratejisi ................................................................ 52
5.3 SQL’e Sorgu Örnekleri .................................................................................... 55
5.4 SQL'de EXIST Fonksiyonu ............................................................................. 57
5.5 Toplama (Aggregation) Fonksiyonları ve Gruplama (Grouping) .................... 57
5.6 Güncelleme Operasyonları............................................................................... 58
6 Veri Tabanı Tasarımı .......................................................................................... 59
6.1 Veri Tabanı Tasarımı ....................................................................................... 59
6.2 İyi Bir İlişkisel Şema Tasarımının Ölçütleri .................................................... 59
6.3 Fonksiyonel Bağımlılık.................................................................................... 60
6.4 Çok-Verili Bağımlılık (MVD) ......................................................................... 64
6.5 Normalizasyon (Ayrıştırma) ............................................................................ 65
6.6 Normal Formlar ............................................................................................... 65
3
6.7 Ayrıştırma ile İlgili Problemler ........................................................................ 67
6.8 İlişkisel Veri Tabanı Şema Tasarımı İçin Algoritmalar ................................... 68
7 Kavramsal Modelin Mantıksal Modele Dönüştürülmesi .................................... 68
7.1 ER’nin İlişkisel Modele Dönüştürmesinin Gerçekleştirimi ............................. 69
7.2 Örnek................................................................................................................ 70
7.3 Örnek................................................................................................................ 71
7.4 Örnek................................................................................................................ 72
7.5 Üçlü İlişkinin İlişkisel Şemaya Dönüştürülmesi.............................................. 73
7.6 ISA Hiyerarşilerine Örnek ............................................................................... 73
KAYNAKÇA ..................................................................................................... 74
4
VERİ TABANI
1 Veri Tabanı Sistemlerine Giriş
1.1 Giriş
Veri tabanı sistemlerine geçmeden önce veri işlemleri dosyalar üzerinde
yapılmaktaydı. Gelişen yazılım ve donanım teknolojileri sayesinde yetersiz kalan
dosyaların yerine veritabanı kullanılmaya başlanmıştır. Veritabanı kullanımı sayesinde
daha önce mümkün olmayan bir çok iş rahat bir şekilde yerine getirilmeye başlanmıştır.
Veri tabanı (database) bir sorunu çözmek amacıyla bir araya getirilmiş,
birbirleriyle ilişkili verilerin bir topluluğudur. Veri tabanı, belirli bir tarzda organize
edilmiş faydalı verilerin bir kolleksiyonudur. Bu verilerin bir araya getirilmesi ve
bunların işlenerek anlaşılır bilgi haline dönüştürülmesi bilgiişlem açısından çok
önemlidir.
Çok sayıda bilginin, güvenilir bir şekilde saklanması ve üzerlerinde çeşitli
işlemlerin yapılması gerektiğinde, bu bilgileri oluşturan verilerin anlamlı biçimde
düzenlenmeleri gerekmektedir. İyi düzenlenmiş bir veri tabanı ile birçok işlev yerine
getirilebilir.
Veri tabanı bileşenleri üç ana bölümden oluşur. Bu bölümler Alan, Kayıt ve Dosya
bölümlemeleridir.
Alan (field), veri tabanı içinde verilerin isimlendirilmiş en küçük birimidir. (okul
no, ad, soyadı, yabancı dili ... gibi).
Kayıt (record), Birbirleriyle bağlantılı alanlar topluluğudur. Bir öğrenciye ait okul
no, ad, soyadı, yabancı dili bilgilerinin bütünüdür.
Dosya (file), Aynı alanlara sahip kayıtların topluluğudur.
5
Veri üzerinde işlem yaparken iki yaklaşım vardır; bunlardan birincisi dosya
yaklaşımı (VTYS kullanılmayan yapı) bir diğeri ise veritabanı yaklaşımı, bu
yaklaşımda veritabanı yönetim sistemi kullanılır.
VTYS kullanılmadığı durumdaki yapı:
ŞEKİL 1.1 - Dosyalarla uygulama yazılımları arasındaki ilişki
VTYS kullanılmadan, sadece dosyaların kullanılmasında karşılaşılan problemlerden
bazıları:
•
Her dosya farklı bir sırada işlenir.
•
Kayıtın uzunluğu değiştiğinde bu kayıtın bulunduğu dosyalara ulaşan
programlar da ona göre değiştirilmelidir.(lack of flexibility)
6
•
Verilerin tekrarlanması söz konusudur.(data redundancy)
•
Her lokasyondaki veriler tutarlı(consistent) olmayabilir.
•
İzin verilmemiş kişilerin dosyalara ulaşmalarını engellemek için etkin bir
emniyet sistemi yoktur.(data security)
•
Verilerin işlenmesinin maliyeti çok yüksek olabilir.
•
Yazılımların etkinliği düşük olur.
Çözüm : VTYS
VTYS kullanıldığı durumdaki yapı:
ŞEKİL 1.2 - Dosyalarla VTYS yazılımı arasındaki ilişki
7
Veritabanı(VT) birbiriyle ilgili olan verilerin toplamıdır. Bu veriler kayıt edilmiş
bilinen gerçekleri temsil ederler ve herbiri bir anlam içerir. Bir VT’yi minik dünya
olarak adlandırabiliriz. Çünkü gerçek dünyanın sadece bir parçasını gösterirler.
Veritabanları çok büyük miktarlarda bilgi içerirler. Veritabanları gerçek dünyada var
olan birbirleriyle ilişkili nesneleri (örn: öğrenciler, dersler) ve ilişkileri (örn: Ali
BTSP301’i alıyor) modellerler.
ŞEKİL 1.3 - Veritabanı ve kullanıcılar ilişkisi
1.2 Veri Tipleri
a-Karaktersel (Alfasayısal)Veriler: ASCII karakterlerini kapsar. 1 ile 254 arası sayıda
karakterden oluşabilir.
(Bursa, Okul0115a ,#, s, “123”)
b- Sayısal (Numeric) Veriler: Sayısal değerler, dört işlem yapabildiğimiz değerlerdir.
Ondalık veya tamsayı olabilir.
(123, 845)
c- Tarih Tipi Veriler: Tarih gösteren verilerdir.Otomatik olarak 8 karakter
uzunluğundadır. Normalde gg/aa/yy
formatındadır. SET KONTROL komutları kullanılarak gg/aa/yy formatına dönüşüm
yapılabilir.
8
(05/28/95)
gg aa yy
g- gün a-ay y-yıl
d- Memo Tipi Veriler: Bu türden olan veriler herhangi bir metni yani text’ i içeren
verilerdir. Bu tip verilere ait sahalar diğer sahalardan farklı şekilde işlenir. Çalışılan
dosya çağrıldığında bu sahaya ilişkin bilgiler görünmez, özel olarak o sahaya girilerek
içeriği görülebilir. Kısa not şeklinde bir veri tipi olarak tanımlayabiliriz.
e- Logical (Mantıksal) Tip Veriler: Mantıksal bir sahanın içeriği yalnızca doğru veya
yanlış olabilir. Başka alternatif yoktur.
(Doğru veya Yanlış) (True veya False) ( Yes veya No)
Veri Tabanı Yönetim Sistemi (VTYS): genel amaçlı bir yazılım sistemi olup
kullanıcıların değişik uygulamalar için veri tabanlarını tanımlanmasına, kurmasına ve
işlemesine olanak verir. Veri tabanı ve veri tabanı yönetim sisteminin ikisine birden
Veri Tabanı Sistemi denir.
ŞEKİL 1.4 - VTS, VTYS ve VT kavramlarının şekilsel gösterimi
1.3 VTYS’nin Kullanım Nedenleri
9
•
Gereksiz fazlalığın kontrolü: Aynı verilerin birden fazla kayıt edilmesi, kayıt
alanının boşa gitmesi ve tutarsızlığa sebep olur.
•
Verilerin paylaşımı: Çok sayıda kullanıcının VT’na eş zamanlı olarak
ulaşmasını sağlar. Bunun için VTYS eş zaman kontrol yazılımını içerir.
•
İzinsiz ulaşımların engellenmesi: VTYS emniyet ve kimlik kontrolü alt
sistemleri ile izinsiz ulaşımların engellenmesini sağlar.
•
Çoklu arayüzlerin sağlanması: Sorgu dilleri arayüzleri, doğal dillerin
arayüzleri, vb. arayüzleri sağlar.
•
Veriler arasındaki karmaşık ilişkilerin sunumu: Gelişen VTYS teknolojileri
ile karmaşık ilişkilerin sunumu da mümkün olabilmektedir.
•
Doğruluk kıstaslarının sağlanması: Bunun için bazı özel doğruluk
kıstaslarının VTYS tarafından sağlanabilmesi için önlemler alınmalıdır. Her
kayıtın eşsiz olmasının garanti altına alınması bunlardan biridir. Bunun dışında
dikkat edilmesi gereken birçok konu vardır. VTYS’ler bu konuda da yardımcı
özelliklere sahiptir.
•
Ek kayıt ve kurtarma: Bir VTYS veritabanını donanım ve yazılım
hatalarından koruyabilmeli ve kayıtları
başka bir alanda ek olarak
kaydedebilmelidir. VTYS’lerin birçoğunda gerekli yardımcı unsurlar mevcuttur.
•
Veri
bağımsızlığı
ve
etkin
ulaşımı:
Uygulamaların
verilerin
nasıl
yapılandığından ve tutulduğundan bağımsız olması gerekli bir özelliktir.
•
Uygulama geliştirme zamanının azaltılması.
•
Veri yönetiminin tek tip olması: Tek bir noktadan VTY(Veri Tabanı
Yöneticisi) tarafından yönetilebilmesi, veri kontrolünü kolaylaştırır.
1.4 Veri Tabanları Konusunu Niçin Çalışmalıyız?
•
Hesaplamadan bilgiye doğru bir yönelişin olması.
•
Veri setleri hacim ve farklılık bakımından çok artmaktadır. Örneğin, dijital
kütüphaneler, etkileşimli video, v.b., VTYS’yi gerektiren uygulamalardır.
•
Gelişen teknoloji bazı bilgisayar Mühendisliği alanları VTYS bilgisini
gerektirir.
10
1.5 Veri Modeli ve Sınıflandırılması
Veri modeli, veritabanının yapısını tanımlayabilmek için kullanılan kavramlar
kümesidir. Veritabanının modeli; veri tipleri, işlemler ve kısıtlamalardan oluşur. VT
modellerinin büyük bir çoğunluğu VT üzerinde güncelleme yapan ve kayıtları alıp
getiren bir işlemler kümesini de içermektedir. Bu işlemler ilerde anlatılacaktır.
Veri Modellerinin Sınıflandırılması
Yüksek Seviyeli Veri Modelleri: Bu modeller varlıklar(entities), özellikler
(attributes) ve ilişkiler (relationships) gibi kavramlar kullanırlar. Bu modellere örnek;
ER, IFO, SDM, v.b.
Mantıksal Veri Modelleri: Bu modeldeki kavramlar verilerin bilgisayarda
fiziksel olarak organize olma biçimine çok benzerler. Bunlara örnekler; ilişkisel, ağ,
seviyeli, nesneye-yönelik veri modelleridir.
Fiziksel Veri Modelleri: Bu modeller verilerin bilgisayarda nasıl tutulduklarını
detaylı olarak gösteren kavramlara sahiptirler. Bunlar kayıtların biçimiyle, kayıtların
sırasıyla, ulaşma yollarıyla ilgili bilgiler içerirler.
1.6 Veri Tabanı Tanımı (Şema)
Şema verilerin yapısını gösterir.
Örnek:
ŞEKİL 2.1 - Öğrenci ilişkisinin şeması
Veritabanı örneği: Veritabanındaki o anda aktif bulunan veriyi gösterir.
Örnek:
11
ŞEKİL 2.2 - ÖĞRENCİ ilişkisinin örnek kayıtları (tuple'ları)
ŞEKİL 2.3 - Üç seviyeli VT yapısı
Veri Bağımsızlığı: VT'nin üç seviyeli yapısıyla sağlanabilmiştir. Herhangi bir
seviyedeki şemada bir değişiklik yapılırsa bir üst seviyedeki şemada değişiklik
yapılmasına gerek yoktur. Sadece bu iki seviye arasındaki uyumlaştırmayı
değiştirmemiz yeterlidir.
12
ŞEKİL 2.4 - VT'nin genel görünüşü ve dışsal görünüşleri
Eş zamanlı (concurrent) gerçekleştirim iyi bir VTYS performansı için temeldir.
Diske erişim VTYS uygulamalarında çok sık gereklidir ve dolaylı olarak yavaştır.
Bundan dolayı merkezi işlemci birimini bir çok kullanıcı programında eş zamanlı
olarak kullanabilmek performans bakımından önemlidir.
VTYS veri tabanlarında tutarsızlıkların oluşmayacağını garanti altına almaya çalışır
ve kullanıcılara sanki tek kullanıcılı sistemi kullanıyorlarmış intibaını verir.
1.7 Veri Tabanı Dilleri
· Veri Tanımı Dilleri (VTD, DDL): Bu diller VT’nin hem kavramsal hem de içsel
şemasının
tanımı
ve
bunlar
arasındaki
herhangi
bir
uyumlaştırma
için
kullanılmaktadırlar.
· Depolama Tanımlama Dili(DTD): Kavramsal seviye ile içsel seviye arası kesin
hatlarıyla ayrılmışsa özellike içsel şemanın tanımı için kullanılır.
13
·
Gözlem Tanımlama Dili(GTD): Kullanıcıların gözlemlerini belirlemekte
kullanıldığı gibi, gerçek bir üç-seviyeli yapı söz konusu ise bu dışsal şemaları
kavramsala dönüştürmede de kullanılırlar.
· Veri İşleme Dilleri(VİD, DML): VT’nin işlenmesinde kullanılırlar.
1. Yüksek Seviyeli VİD: Tek başına kullanılan bu tür diller VT’nin
karmaşık işlemlerini bütün olarak belirtebilmektedir. Bunlar ya
direk komut olarak girilebilmekte ya da genel amaçlı bir
programlama diline gömülerek tanımlanabilmektedir. Bunlar
ayrıca küme merkezli VİD’ler diye de adlandırılırlar.
2. Düşük Seviyeli VİD: Bunlar genel amaçlı bir programlama diline
gömülerek tanımlanırlar. VT'den tek tek kayıtları alıp getirirler
ve her kayıt ayrı ayrı işlem görür.
Eğer VİD bir genel amaçlı dilin içine yerleştirilmişse buna veri alt dili (data
sublanguage) adı verilir. Eğer VİD tek başına birbirini etkileyen (interactive) biçimde
kullanılmışsa buna sorgu dili (query language) adı verilir.
14
ŞEKİL 2.5 - VTYS'de bulunan kısımların genel bir ilişki şeması
1.8 Veri Tabanı Sistemi Ortamı
•
Kayıtlı veri yöneticisi (Registered Data Manager): Bu yüksek seviyeli VTYS
modülü diskte depolanmış VTYS bilgilerine ulaşmayı kontrol eder.
•
VTD derleyici (DDL Compiler): VTD’de belirtilen şemanın tanımlarını işler
ve bunları VTYS kataloğunda depolar.
•
Çalışma zamanı veri tabanı işlemcisi (Runtime DB Processor): Çalışma
zamanı (runtime) VT işlemlerini halleder, güncelleme ve alıp götürme işlem
komutlarını alır ve bunları VT üzerine taşır.
•
Sorgu İşlemcisi (Query Processor): Birbirini etkileyen şekilde girilmiş yüksek
seviyeli sorguları halleder; sorguyu analiz eder, ayrıştırır, sonra da bir çağrı ile
yürütme zamanı işlemcisine söz konusu isteği yürütme komutunu verir.
•
Önderleyici (PreCompiler): Bu sadece VİD komutlarını herhangi bir genel
amaçlı programlama diliyle yazılmış uygulama programından seçip ayırır.
15
•
VİD Derleyicisi (DML Compiler): Önderleyiciden gelen komutlar burada
derlenir ve VT işlemi yapabilecek obje koduna dönüşür.
•
Host dili derleyicisi (Host Language Complier): VİD komutları dışındaki host
dilin komutları bu modüle derlenmek üzere gelir.
VİD komutları için gerçekleştirilen amaç kodu ve programın geri kalan kısmı
birbirine bağlanır ve derlenmiş kısa iletişim oluşturulur. Burada sonuç olarak
oluşturulan yürütülebilen kod aynı zamanda yürütme zamanı veritabanı işlemcisine
çağrıyı da içermektedir.
Veritabanı sistemleri ile, son noktadaki kullanıcılar, VTYS satıcıları, VT uygulama
programcıları ve veri tabanı yöneticisi(VTY) veritabanı ile ilgili işlerini rahat, doğru ve
etkin bir biçimde yapabilmesi esastır.
Veri tabanı yöneticisinin (VTY) temel sorumlulukları:
Mantıksal ve fiziksel şemaların tasarımı
Emniyetin sağlanması ve izin verilme işlemlerinin yapılması
Verilere istenildiğinde ulaşılabilmesi ve VT’nin gereken durumlarda
kurtarılması.
VT’nin ihtiyaçları değiştikçe ayarlamaların yapılması.
1.9 VTYS'lerin Sınıflandırılması
1.9.1 Veri Modeline Göre
İlişkisel VTYS’ler – Sybase, Oracle 7.6, SQL Server
Seviyeli VTYS’ler – IMS
Ağ VTYS’ler – DBTG
İlişkisel nesne modelli VTYS’ler – Oracle 8, DB2, Informix
Nesneye-yönelik VTYS’ler – GemStone, O2, ObjectStore
16
Genişletilmiş İlişkisel VTYS’ler – Starburst
Çıkarımcı VTYS’ler – Postgres, Educe, Prosql
Çıkarımcı Nesneye Yönelik VTYS’ler
1.9.2 Kullanıcı Sayısına Göre
Tek kullanıcılı sistemler
Çok kullanıcılı sistemler
1.9.3 Yer Sayısına Göre
 Merkezi VTYS’ler
Dağıtık VTYS’ler
Homojen VTYS’ler – bunlar çok yerde aynı VTYS yazılımını kullanırlar.
Heterojen VTYS’ler – bunlar federal VTYS’lere dönüşürler ve diğer bir
isimle de çoklu veritabanı sistemi olarak adlandırılırlar.
1.9.4 Genel Amaçlı ve Özel Amaçlı Olmalarına Göre
17
2. Veri Tabanları İçin Kavramsal Modelleme
2.1 Kavramsal Tasarım
ŞEKİL 2.1 - Veritabanı uygulamaları için tasarım safhaları
Kavramsal tasarım veritabanı tasarım safhalarında gösterildiği gibi ihtiyaçlar
analizini takip eder ve veritabanında tutulacak olan verilerin yüksek seviyede bir
gösterimini verir.
Varlık-İlişki (ER) Modeli, kavramsal tasarım için en popüler ve en çok kullanılan
modeldir. ER’deki notasyonlar oldukça bilgi verici ve insan bakışına yakın özelliklere
sahiptir. ER’nin en temel kavramları varlıklar (entities), ilişkiler (relationships) ve
özellikler (attributes)dir.
ER modelinin bir çok değişik varyasyonu vardır ve notasyonların gösterimleri çok
farklı olabilmektedir. Ancak en çok kabul gören ve kavramları içeren ER modelini
burada ele alacağız.
2.2 ER Modelinin Kavramları
- Varlık: ER’nin sunduğu temel nesnedir. Gerçek dünyada bağımsız olarak var olan bir
‘şey’dir.
18
- Özellik: Varlığın belirli bir özelliğini belirtir. Varlığı tanımlayan özelliklerin değerleri
veri tabanında depolanan verilerin ana kısmını oluştururlar.
- Basit özellikler: Daha küçük parçaya bölünemeyen özelliklerdir.
- Birleşik özellikler: Birden fazla basit özellikten oluşan özelliklerdir.
- Tek verili özellikler: Birden fazla veriye herhangi bir nesnede sahip olamayan
özelliklerdir.
- Çok verili özellikler: Birden fazla veriye herhangi bir nesnede sahip olabilen
özelliklerdir.
- Oluşturulan özellikler: Öteki özelliklerden elde edilen özelliklerdir.
- Varlık tipi: Aynı özelliklerden oluşan varlıkların kümesidir kümesi.
- Nesne-tipi şema: Nesne tipinin tanımını gösterdiği gibi belirli bir tipe sahip olan
nesnelerin paylaştığı bir genel yapıyı da belirtir (genelde “şema” sözcüğü bütün
verilerin mantıksal görünüşünü belirtir).
- Örnekler: Belirli bir tipteki bireysel nesnelerin belirli bir zamanda ve andaki örnekler
kümesini gösterir ve zamanla değişirler.
- İlişki tipi: Nesneler arasındaki ilişkiler kümesini gösterir. İlişki tipinin derecesi
ilişkide yer alan nesnelerin sayısıyla belirlenir.
- Zayıf varlık tipi: Bunlar kendilerine ait anahtar niteliğe sahip değillerdir. Bu tür
nesne tipine ait olan nesneler diğer bir nesne tipindeki belirli bir nesneye aittir ve kendi
nitelikleri ve diğer nitelik tipinin anahtar niteliğiyle birlikte ayırt edilebilirler. Sözü
edilen diğer nitelik tipine belirleyici sahip, bu ikisi arasındaki ilişki tipine de belirleyici
ilişki denir.
- Anahtar nitelik: Bu niteliklerin değerleri her nesne için farklı olmak zorundadır.
- Değerler kümesi(alan): Bu her bir nesnenin her bir niteliğinin alabileceği değerler
kümesidir.
- Yapısal kısıtlamalar: Bunlar kardinality oranı (ratio), bir nesnenin dahil olabileceği
ilişki örneklerinin sayısıdır.
- Dahil olma kısıtlaması (participation constraints): Bir nesnenin varolmasının ilişki
tipi üzerinden diğer bir nesneyle ilgili olup olmamasına bağlı olduğunu belirler.
Bunların iki değişik tipi vardır:
19
- Toptan (total): bütün nesneler ilişki tipi üzerinden birbiriyle ilgili olmak
zorundadırlar.
- Kısmi (partial): bütün nesneler ilintili olmak zorunda değildir.
•
Bu
kavramlarla
ilgili
ER
notasyonları
verildikten
sonra
kullanacaklardır.
•
Bir nesne kümesindeki tüm nesneler aynı nitelik kümesine sahiptirler.
•
Her nesne kümesinin bir anahtarı vardır.
•
Her niteliğin bir değerler kümesi vardır.
•
Her nesne kümesi bir ilişkiye kolayca dönüştürülebilir.
ŞEKİL 2.2 - ER'da kullanılan temel notasyonlar
2.3 ER Modelde İlişki Tipleri
2.3.1 Nesne tipleri arasındaki ilişki tipleri
Hasta <- - - - - > Yatak
1-1 ilişkisi söz konusudur
Hasta <<- - - - > Hastane Odası
1-m ilişkisi vardır
20
örneklerde
Hasta <<- - - >> Doktor
n-m ilişkisi ile tanımlanabilir
2.3.2 Nitelikler arasındaki ilişki tipleri
Hasta no <- - - - - - > Hasta ismi, doğum tarihi
1-1 ilişki tipi
Hasta no <- - - - - >> Hasta ismi
1-m ilişki tipi
Hasta ismi <<- - - - >> Doktor ismi
n-m ilişki tipi
ŞEKİL 2.3 - ER'da kullanılan ilişki tipleri
2.4 ER Modelde Kısıtlar
ER modelde birçok tutarlılık kısıtları gösterilebilmektedir. Bunlar;
•
anahtar kısıtı
•
katılım kısıtı
•
üstüste gelme/örtme kısıtı
•
yabancı anahtar kısıtı
Bu
kısıtlardan
bazıları
veritabanının
dilinde
(SQL)
ilerdeki
bölümlerde
görülebileceği gibi direk olarak gösterilebilmektedir.
Bazı kısıtlar (örneğin fonksiyonel kısıtlar) ER modelde gösterilememektedir.
Kısıtlar iyi bir veritabanı tasarımı için çok önemli anahtar rolü oynamaktadırlar.
21
2.5 ER Modele Örnek
ŞEKİL 2.4 - Örnek ÇALIŞAN veri tabanı uygulamasının ER ile gösterimi
Bu örnekte;
Çalışan: Nesne tipine bir örnektir.
Bağımlı: Zayıf nesne tipine bir örnektir.
İçin_Çalışır: İlişki tipine bir örnektir.
Bağımlısı_Olan: Tanımlayıcı ilişki tipine bir örnektir.
Maaş: Nitelik.
SSN: Anahtar nitelik.
Yerler: Çok verili nitelik.
İsim: Birleşik nitelik.
22
ŞEKİL
2.5-
ÇALIŞAN
uygulamasının
ER
ile
değişik
bir
gösterimi
Bu örnek bir önceki örneğin aynısıdır. Sadece yapısal kısıtlamalar (min, max)
kullanmaktadır. Halbuki bir önceki örnek toptan ve kısmi kısıtlamaları kullanmaktadır.
ŞEKİL 2.6 - Üçlü ilişkiye örnek ER diyagramı
Bu örnek üçlü ilişkiyi göstermektedir. Bu üçlü ilişkiyi nesne tiplerinin ayrı ayrı ikili
ilişkileri ile gösteremezsiniz. Yani aşağıdaki örnek yukarıdaki üçlü ilişki ile aynı
değildir.
ŞEKİL 2.7 - Üçlü ilişki (şekil 2.6) ile aynı olmayan bir başka gösterim
ER tasarımı subjektiftir. Yani verilen bir senaryoyu bir çok değişik şekilde tasarlamak
mümkündür.
23
Alternatif tasarımları analiz etmek (özellikle büyük çaptaki uygulamaların tasarım
alternatiflerini analiz etmek) oldukça zor olabilir. Birbirinin alternatifi olabilecek bazı
ER kavramlarını şöyle sıralayabiliriz: Nesne-nitelik, nesne-ilişki, ikili-üçlü ilişkiler,
ISA hiyerarşisi, birleşik nitelik, vs.
İyi bir veritabanı tasarımı elde edebilmek için, elde edilecek olan ilşkisel veri
modeli analiz edilmeli ve daha iyi bir duruma getirilmelidir. Fonksiyonel
Bağımlılık(FB) bilgisi ve normalizasyon teknikleri (ilerideki bölümlerde anlatılacak)
özellikle çok faydalıdır ve veritabanı tasarımını bu tekniklere göre yapmak gerekir.
2.6 ER Diyagramında IS-A Hiyerarşisi
Bazı karmaşık uygulamalarda ER’nin şimdiye kadar tartıştığımız yapıları yeterli
olmayabiliyor. Bundan dolayı ER modeli genişletilmiş ve IS-A hiyerarşileri modele
dahil edilmiştir. Bu kısımda sadece IS-A hiyerarşilerinin ER modeline dahil edilmesini
çalışacağız. Eğer A IS-A B olarak tanımlanırsa, bunun anlamı her A nesnesi bir B
nesnesi olarak da düşünülebilecektir.
Örnek:
ŞEKİL 2.8 - Örnek ISA diyagramının ER'da gösterimi
Bu örnekte her kontratlı çalışan ile saatli çalışan aynı zamanda bir çalışan nesnesidir
ve çalışan nesne-tipine ait olan niteliklerin hepsi (no, isim, yaş) aynı zamanda kontratlı
çalışan ve saatli çalışan nesnelerin de nitelikleridir. Bu kalıtım (inheritance) yoluyla ISA hiyerarşisi durumunda daha genel nesne tipinden (üst sınıf) özeline (alt sınıf) geçer.
IS-A kullanmanın bazı nedenleri arasında şunları sayabiliriz:
•
•
•
Bir alt sınıfa özel açıklayıcı nitelikler eklemek durumu gerekli olduğunda,
Bir ilişkinin parçası olacak olan nesneleri tanımak gerekli olduğunda,
ISA kullanmak modelimizin anlaşılmasını kolaylaştırır.
24
3. Fiziksel Veri Tabanı Modellemesi
3.1 Fiziksel Veri Tabanına Giriş
3.1.1 Genel Bilgiler
VTYS bilgileri ikincil hafıza olan yan bellekte (hard diskte) tutar.
VTYS’nin verileri yan bellekte tutmasının bazı sonuçları vardır. Bunlar;
•
READ: Verilerin yan bellekten (hard disk) ana belleğe (RAM) transfer edilmesi.
•
WRITE: Verilerin ana bellekten yan belleğe transfer edilmesi .
Bu iki operasyon da ana bellek için operasyonlarla karşılaştırılırsa oldukça
pahalıdır. Bundan dolayı çok iyi planlanmalıdır.
Bu durumda neden tüm veriler ana bellekte tutulmuyor diye sorulabilir. Bunun
nedenlerini şöyle sıralayabiliriz:
•
Ana bellekte veri tutmanın masrafı çok fazladır. Örneğin 128 MB ana bellek
satın alınabilirken aynı fiyata 8GB disk alınabilir.
•
Ana bellek geçicidir (volatile). Verileri yürütmeler esnasında kaybetmek
istemeyiz.
Tipik depolama hiyerarşisi şu şekildedir:
•
RAM halihazırda kullanılan veriler içindir. (ana bellek)
•
Disk ana veritabanı içindir. (ikincil bellek)
•
Teypler verilerin eski versiyonlarını tutmak içindir. (üçüncül bellek)
Disklerde veriler disk blokları ya da sayfalar halinde tutulur ve alınırlar.
Ana bellekten farklı olarak bir disk sayfasını alıp getirmenin masrafı o sayfanın
diskteki yerine bağlıdır. Dolayısıyla sayfaların diskte relatif yerleştirildiği yerler
VTYS’nin performansına en fazla etki eden faktördür.
Bir disk sayfasına ulaşmanın (READ ve WRITE) zamanı üç değişik zamanın
toplamıyla bulunur.
•
Arama zamanı (seek time – disk kolunun hareketi için gerekli zaman)
25
•
Dönme zamanı (rotational time – disk blokunun disk başının altına gelmesi için
gerekli zaman)
•
Transfer zamanı (transfer time – verinin disk yüzeyine/yüzeyinden hareketi için
gerekli zaman)
Arama ve dönme için geçen süre tüm süreyi en fazla etkileyen süredir. Örneğin
arama zamanı 1 ile 20 msec arasında değişirken, dönme süresi 0 ile 10 msec ve transfer
süresi her 4 KB sayfa için 1 msec’dir. Bu süreler teknolojinin gelişmesiyle
değişmektedir, ancak göreli hız farklılıkları hala benzerdir. Bu durumda I/O masrafını
azaltmanın anahtarı arama/dönme gecikme sürelerini azaltmaktır.
Diskte sayfaları yerleştirme biçimi I/O masrafını azaltmakta etkili olabilmektedir.
Örneğin bir sonraki bloğun aynı iz(track) üzerinde olması, bir kütükteki blokların
ardarda yerleştirilmesi arama ve dönme gecikmesini en aza indirir. Buna ilave olarak
eğer bir ardısıra (sequential) bakma yöntemi kullanılıyorsa, bir anda birkaç sayfanın
önceden alınması masrafın azaltılmasında etkili olur. VTYS’nin en alt seviyede
yönettiği diskteki alanlardır. Daha yukarıdaki seviyelerdeki çağırma
•
sayfayı tahsis etmek/geri tahsis etmek (allocate/deallocate)
•
sayfayı oku/yaz
Yüksek seviyelerde sayfaların tahsis istekleri belirtilir ve bunun nasıl yapıldığının, boş
alanların nasıl yönetildiğinin bilinmesine gerek yoktur.
Bir VTYS’de ara bölge (ya da tampon - buffer) yönetimi veri tabanının
performansını artıran bir yaklaşımdır.
ŞEKİL 3.1 - VTYS'de tampon alanı
26
Popüler yerleştirme stratejilerinden;
•
en az son zamanlarda kullanılan (least recently used, LRU)
•
en son kullanılan (most recently used, MRU)
günümüzde kullanılan en önemli yerleştirme stratejileridir.
3.1.2 Fiziksel Veri Tabanı Tasarımı
Fiziksel veri tabanı tasarımı veri tabanının etkin bir şekilde işlenebilmesini sağlayan
belirli bir veri organizasyon tekniğini seçmeye dayanır.
Diskin üzerinde toplanan veriler kayıtların kütükleri olarak organize edilirler.
Kayıtlar disk üzerinde öyle bir depolanmalıdır ki onlara gereksinim duyulduğunda
onları bulup getirmek hızlı olabilsin.
Birbiriyle ilgili olan değerlerden oluşan kayıttaki her değer kayıtın belirli bir alanına
karşılık gelir ve birkaç byte yer tutar.
Kayıtlar genellikle nesneleri, onların nitelikleri ve nesneler arasındaki ilişkileri
tanımlarlar.
Alanların isimleri onların karşılık geldiği tipler bir kayıt tipini ya da kayıt biçimi
tanımını oluşturur. Bir veri tipi bir alanın alabileceği değeri belirler. Bunların en
önemlileri şunlardır:
- integer
}
- long integer
}
- real number
}
- sabit uzunluk
}
- değişken uzunluk
}
karakterler dizisi
- boolean
}
(string of characters)
- tarih
}
sayısal
Bir kütük kayıtlardan oluşur ve kütük sabit uzunluklu kayıtlardan ya da
değişken uzunluklu kayıtlardan oluşabilir.
27
ŞEKİL 3.2 - Kütükte kayıt yapıları
Bir kütükte değişken uzunluklu kayıtların olması aşağıdaki nedenlerden dolayı
gereklidir. Çünkü:
•
değişken uzunluktaki alanların olması
•
tekrarlanan alanların olması
•
seçenekli alanların olması
•
farklı kayıt tiplerinin (eğer farklı tiplerin ilgili kayıtları bir arada tutuluyorsa)
olması
ŞEKİL 3.3 - Kayıtların alternatif bir gösterimi
Blok (sayfa) Biçimi : Uzunluğu Sabit Kayıtlar
ŞEKİL 3.4 - Değişik blok yapıları
Kayıt_no(kno) = <sayfa_no, yer#>
Kayıtların yer değiştirmesi boş alan yönetimi için kno değişmesini gerektirir.
28
Sayfa Biçimi : Uzunluğu Değişken Kayıtlar
ŞEKİL 3.5 - Uzunluğu değişken kayıtların bir gösterimi
Uzunluğu değişken kayıtları sayfa için yer değiştirebiliriz (kno’yu değiştirmeden).
Bundan dolayı sabit uzunluklu kayıtlara tercih edilebilirler.
ŞEKİL 3.6 - Blokların kütükte organizasyonu
- Eğer kayıtların sayfa sınırlarını aşmalarına izin verilmiyorsa buna aktarımsız
(unspanned) organizasyon denir.
- Eğer bir kayıt birden fazla bloğa taşınabiliyorsa buna aktarımlı (spanned)
organizasyon denir.
1. Ardısıra (contigious) atama: Kütük blokları diskteki ardısıra bloklara atanır.
Bu tür kütüklerden okumak kolay ancak kütüğün genişlemesi zordur.
2. Bağlantılı (linked) atama: Her kütük bloğu bir diğerine bağlanabilmek için bir
göstergeye (pointer) sahiptir. Bu tür kütüklerin genişlemesi kolay ancak okuma
işlemi yavaştır.
3. Ardısıralı disk bloklarının salkımlarının (clusters) birbiriyle bağlanması.
4. Dizinlenmiş (indexed) atama: Bir ya da daha fazla dizin blok gerçek kütük
bloklarına işaret eden göstergeler içerirler. Bu yapıyla kayıtları niteliklerin
değerini belirterek hızlı bir şekilde bulmak mümkündür.
29
5. Yukarıdakilerden oluşan kombinasyonlarla elde edilen teknikler vardır.
Başarılı bir kütük organizasyonu özellikle kütüğe sık sık uygulayacağımız bütün
kütük operasyonlarını (find (locate), read (get), findnext, delete, modify, insert, findall,
findordered, reorganize, open, close) mümkün olduğunca hızlı yapmalıdır.
3.1.3 Kayıtların Kütükleri
VTYS’nin yüksek seviyelerinde kayıtlar ve kayıtların kütükleri üzerinde operasyon
gerçekleştirilir. Kütük, kayıtların bir grubundan oluşmuş sayfaların toplamıdır.
Kütüklerle kayıtların giriş, silme, değiştirme, bir kayıdı okuma ve tüm kayıtların
üzerinden geçme gibi operasyonları gerçekleştirilebilir.
Sıralanmamış (unordered) Kayıtların Kütüğü:
En basit kütük yapısıdır.
•
Yeni kayıtlar kütüğün sonuna eklenir.
•
Yeni kayıt eklemek çok hızlıdır.
•
Kayıt arama operasyonu linear aramayı gerektirir.
•
Kayıt silme işlemi yavaştır.
Sıralanmış (ordered) Kayıtların Kütüğü:
Diskteki kütüğün kayıtları kayıttaki bir alanın değerine göre fiziksel olarak
sıralanmıştır. Bu alana kütüğün sıralayan alanı (ordering field) denir ve bu tür
kütüklere sıralanmış ya da sırasal (sequential) kütük adı verilir.
Bazı avantajları:
•
Sıralayan alan değer sırasına göre kayıtların okunması oldukça hızlı
•
Sıralayan alan değer sırasına göre bir sonraki kayıtın bulunması oldukça hızlı
•
Sıralayan alan değer üzerinde bir arama kriterine göre kayıtların aranması
oldukça hızlı
•
Bu tür kütüklerde kayıtların girme ve silme işlemi oldukça pahalıdır. Çünkü
kayıtlar fiziksel olarak da sıralanmış olmak zorundadır. Bu işlemleri biraz
hızlandırmak için bazı teknikler kullanılabilir:
o
Silinmiş işareti kullanmak ve belli periyotlarla kütüğü organize etmek.
30
o
Giriş için her blok içinde gelecek yeni kayıtlar için boş alan bırakmak.
o
Geçici olarak bir sıralanmamış kütük (buna overflow ya da transaction
kütük denir) yaratmak ve yeni kayıtları bu kütüğün sonuna eklemek.
Daha sonra da bunu belli periyotlarla sıralı (master) kütükle
birleştirmek.
Bu tür sıralı kütükler VT uygulamalarında pek kullanılmaz. Ancak kütükle birlikte
bir de ek bir ulaşma patikası (access path) olarak birincil dizin (primary index) varsa, o
zaman bu tür kütükler kullanılır.
Kütükteki boş alanların takibi için en önemli iki yöntem:
•
Liste Kütükler
•
Sayfa Rehberli Kütükler
Liste Kütükler
ŞEKİL 3.7 - Liste kütüklerin bir gösterimi
Her sayfa iki gösterge tutar.
Sayfa Rehberli Kütükler
ŞEKİL 3.8 - Sayfa rehberli kütükler
Her sayfanın girişinde o sayfada bulunan boşluk miktarı bilgisi tutulur. Rehber
(direktör) sayfaların toplamıdır ve sayfaların birbirine gösterge ile bağlanmış olması
sadece yöntemlerden biridir.
31
Sistem kataloglarında aşağıdaki bilgiler tutulur.
Her dizin için; dizinin yapısı ve arama anahtarı alanları,
Her ilişki için; ilişkinin ismi, kütük ismi, kütük yapısı, niteliklerin isimleri ve tipleri,
dizinlerin isimleri, tutarlılık kısıtları, vs tutulur.
Her görünüş için; görünüş ismi ve tanımı, istatistikler, yetki-verme, arabölge
(buffer) büyüklüğü, vs. tutulur.
Kataloglar da ilişkiler gibi yapılanıp sistemde tutulurlar. Örneğin;
ŞEKİL 3.9 - Katalogda tutulan bilgiler
3.2 Fiziksel Veri Tabanında Dizinleme
3.2.1 Kütük Organizasyonları
Birçok kütük organizasyon alternatifi önerilmiş ve bunlar çoğu durumlarda ve
koşullarda başarıyla (etkin) kullanılmaktadır.
Kütük organizasyonlarından Heap kütükleri bir kütükteki tüm kayıtların alınıp
getirilmesi durumlarında uygun bir organizasyondur. Sıralanmış kütük organizasyonu
ise kayıtların belli bir sırada alınıp getirilmesi durumunda ya da yalnızca bir aralıktaki
kayıtların getirilmesinde çok etkili bir şekilde kullanılabilmektedirler. Dağıtılmış
(hashed) kütük organizasyonları ise eşitliği gerektiren seçmelerde iyi sonuç
vermektedirler.
3.2.2 Dağıtım (Hashing) Teknikleri
Bu tekniklerde anafikir şudur: Kütük kovalardan (bucket) oluşur ve kova, birincil
sayfa artı sıfır ya da daha fazla ek sayfadan oluşur. Bir h dağıtım fonksiyonu vardır ve
bunu kayıttaki dağıtım alan değerine uyguladığımızda kayıtın diskte depolandığı disk
32
blokunun (kovanın) adresini verir. Yani h fonksiyonu dağıtım (hash) uygulanan alanı
adres alanına dönüştürür. Örnek olarak bilinen bir dağıtım fonksiyonu ;
h(K) = K mod M ‘dir.
Burada K dağıtım alan değeridir ve arama alanı olarak da bilinir. Seçilmiş M ise bir
tam sayı değeridir ve genellikle adres alanının büyüklüğüne eşittir.
ŞEKİL 3.10 - Dağıtım değerlerinin karşılık geldiği kayıtlara örnek
Dağıtım fonksiyonu h : h(r) = r kaydının bulundugu kovanın adresini verir. Her
zaman farklı alan değerlerini farklı adres alan değerlerine dönüştüren bir dağıtım
fonksiyonu bulmak zordur. Bundan dolayı çakışma (collision) meydana gelir ve bu
durumlarda aşağıdaki tekniklerden birisi ya da birkacinin kombinasyonu kullanılabilir.
Açık adresleme (open addressing) : Dolu olmayan bir adres bulana kadar bir
sonraki adresi kontrol etmek suretiyle çalışır.
Zincirleme (chaining) : Yeni kayıtı boş bir alana yerleştirir ve dolu alandan bu
adres alanına ulaşabilmek için bir göstergeyi dolu olan alana ilave eder.
ŞEKİL 3.11 - Zincirleme dağıtım yöntemlerinin gösterimi
Çoklu dağıtım (multiple hashing) : Burada iki dağıtım fonksiyonu söz konusudur.
Öncelikle birincisi uygulanır. Eğer çakışma olursa ikinci fonksiyon uygulanır.
3.2.2.1. Dışsal (External) Dağıtım
Disk kütükleri üzerine dağıtım dışsal olarak bilinir. Her blok ya da blokların
salkımına burada kova denir. Dağıtım fonksiyonu genellikle kovanın gerçek adresi
33
yerine göreceli kova adres numarasını verir. Kütük başlığında tutulan bir tablonun
kullanılmasıyla diskteki gerçek adres elde edilebilir.
ŞEKİL 3.12 - Kovaların disk üzerindeki örnek gösterimi
Taşmanın Kovalar Kullanılması Durumundaki Gösterimi:
ŞEKİL 3.13 - Kovaların kullanıldığı zincirleme yöntemi
İyi bir dağıtım fonksiyonunun amacı adres alanı üzerinde kayıtları mümkün olduğu
kadar düzgün (uniform) olarak dağıtmak, çakışmayı minimize etmek ve çok
kullanılmamış alan bırakmamaktır.
Şimdiye kadar tartıştığımız dağıtım yapıları statik yapılardır ve veri trafiğinin
yoğun olduğu uygulamalarda çok uygun değillerdir. Bundan dolayı dinamik dağıtım
yapıları önerilmiştir. Bu yapıların en önemlileri Dinamik Dağıtım Yapısı ve
Genişleyebilir Dağıtım Yapısıdır.
3.2.2.2. Dinamik Dağıtım Yapısı
Bu yapıda direktör bir ağaç yapısına benzer ve dağıtım fonksiyonunun sonunda elde
edilen dağıtılmış ikili veri (binary string) kullanılarak aranan kaydın hangi kovada
olduğu tespit edilir.
34
ŞEKİL 3.14 - Dinamik dağıtım yapısının gösterimi
3.2.2.3. Genişleyebilir Dağıtım Yapısı
Yukarıda gösterildiği gibi, dinamik dağıtım yapısı gibi bir ağaç şeklindeki direktör
yerine düz bir direktör kullanır. Aynı şekilde, aranan kayıdın hangi kovada olduğu
dağıtım fonksiyonunun sonucunda elde edilen ikili değere göre bulunur.
ŞEKİL 3.15 - Genişleyebilir dağıtım yapısının gösterimi
35
3.2.3 Dizinleme (Indexing)
Bir
kütükte
dizileme
arama
anahtar
alanı
üzerinden
seçme
işleminin
hızlandırılmasını sağlar. Bir ilişkideki niteliklerin herhangi bir alt kümesi bir dizin için
arama anahtarı olabilir. Arama anahtarı bir ilişkideki anahtar nitelikle aynı şey değildir.
Bir dizin verilerin bir grubunu içerir ve bütün verilerin etkin bir şekilde alınıp
getirilmesini sağlar.
Birincil ve İkincil Dizinleme: Eğer arama anahtarı birincil anahtarı içeriyorsa, o
zaman birincil dizinleme söz konusudur. Örnekler aşağıda verilmektedir.
Salkımlı ile Salkımsız Dizinleme: Eğer veri kayıtlarının sırası dizin yapısındaki
veri sırası ile aynı ya da ona yakınsa, o zaman salkımlı dizin söz konusudıur. Bir kütük
en fazla bir arama anahtarına göre salkımlanabilir.
ŞEKİL 3.16 - Birincil dizinde dizin direktörü ve kayıtların gösterimi
36
ŞEKİL 3.17 Salkımlanan dizinde dizin direktörü ve kayıtlar
ŞEKİL 3.18 - İkincil dizinde dizin direktörü ve kayıtlar
ŞEKİL 3.19 - İki seviyeli birincil dizinin yapısı
37
ŞEKİL 3.20 - İki seviyeli ikincil dizinin yapısı
3.2.4 B+_Ağaç Yapısı
•
En fazla kullanılan dizin yapısı
•
Veri girişi ve silme logFN sürede yapılır.
F : bir düğümün (node) olabilecek en fazla alt dügüm sayısı
N : yaprak sayfalarının sayısı
•
Bu ağaç her durumda dengelidir
•
Kök hariç %50 doluluk oranı tutturulur
•
Eşitlik ve aralık tabanlı aramaları etkin bir şekilde destekler
ŞEKİL 3.21 - B+_Ağaç yapısının genel görünümü
38
•
Arama kökten başlar ve anahtar karşılaştırmaları ile yapraklara kadar iner.
ŞEKİL 3.22 - Örnek B+_Ağacı
3.2.4.1. B+_Ağaç Veri Yapısında Bir Verinin Girişi
•
doğru yaprak L’yi bul
•
veriyi L’ye koy
•
Eğer L’de yeterli boşluk varsa, bitti!
•
Aksi halde L’yi, L ve L2 olarak ikiye ayır
o
L’deki verileri eşit bir şekilde tekrar dağıt ve orta anahtarı yukarıya kopyala
o
Dizinde L2’yi L’nin ailesine bağla
Bu içsel döngülerle yapılabilir. Bölme ağacın büyümesine neden olur. Kökte
bölünme ağacın yüksekliğinin artmasıyla sonuçlanır. Yani ağaç ya genişler ya da bir
seviye yükselir.
Örnek: Eğer önceki B+_ağaç örneğine 8 verisinin girişini yaparsak aşagıdaki
B+_ağaç yapısını elde ederiz.
ŞEKİL 3.23 - Veri girişinden (8) sonraki B+_ağacının yapısı
Bu örnekte görülebileceği gibi kök ikiye ayrılmıştı ve bu da ağacın yüksekliğinin
artmasına neden oldu. Bu örnekte kökteki ayrılmayı önlemek için ağaçtaki verileri
tekrar dağıtabilirdik, fakat pratikte bu pek yapılmaz.
3.2.4.2. Verilerin B+_Ağacından Silinmesi
•
Kökten başla ve verinin dahil olduğu L yaprağını bul
39
•
Veriyi sil
•
Eğer L en az %50 dolu ise, bitti!
•
Aksi takdirde
o
Komşu düğümlerden ödünç alıp tekrar dağıtım yapılması denenir.
o
Eğer tekrar dağıtım başarısız olursa L’yi komşuları ile birleştir.
Eğer bir birleştirme olursa, L’nin ailesinden bir çıkışı silme durumu oluşur ve köke
kadar çıkma durumu olabilir ve ağacın yüksekliğinin azalmasıyla sonuçlanabilir.
Örnek: Bir önceki B+_ağacından ( 8’in girişi yapıldıktan sonraki hali), sırayla 19,
20 ve 24’ü silelim.
•
19’u silmek kolay
•
20’yi silmek tekrar dağıtımın yapılması ile bitirilebilir.
•
24’ün silinmesi birleştirme işlemini sorunlu kılıyor.
19 ve 20’nin silinmesinden sonraki B+_ağacı;
ŞEKİL 3.24 - Silme (10,20) sonrası B+_ağaç yapısı
24’ün silinmesi sonucundaki B+_ağacı;
ŞEKİL 3.25 - Silme (24) sonrası B+_ağacı yapısı
40
4 İlişkisel Veri Modelleme
4.1 İlişkisel Veri Modeli
En geniş kullanım alanı olan modeldir. Bu modeli temel alan bazı VTYS’ler
şunlardır:
Oracle 7.6, Sybase, SQL Server, v.s.
İlişkisel modele alternatif model olarak, nesneye-yönelik model ise yaygınlaşmaya
devam etmektedir. Nesneye-yönelik model için bazı örnek sistemler şunlardır: Object
Store, Ontos, Versant, O2, Itasca.
İlişkisel model ile nesneye-yönelik modelin kaynaşmasından ortaya çıkan nesneilişkisel modelini kullanan ürünler ise son yıllarda birçok endütriyel VT şirketince
piyasaya sürülmüştür. Bunlara örnek sistemler: UniSQL, Informix Universal Server,
Oracle 8.0, DB2, vs.
4.1.1 İlişkisel Veri Modeli - Tanımlar
Bu model iki boyutlu tablolar halinde gösterilir ve herbir tabloya ilişki (relation)
denir. İlişkide gösterilen herbir veri satırına tuple denir ve her kolon da bir niteliğin
(attribute) verilerini içerir. Nitelikler verilerini belli bir alandan almak durumundadırlar
ve bu alana domain denir. Bir ilişkideki niteliklerin sayısı da o ilişkinin derecesini
(degree) gösterir.
Bir ilişki şeması R, R(A1 , A2,…, A n) ile gösterilir, bir nitelikler kümesinden oluşur
ve R={A1,A 2,…,An } dir. Örneğin, öğrenci(no, isim).
Bir ilişki şeması r(R) ile gösterilir ve tuplelar(sıralar) kümesinden oluşur. r={t1 ,
t2,…,t n} dir. Her tuple t, n değerden oluşan bir sıralı listedir ve t=<v1,v 2, …,vn >.
Buradaki her vi dom(Ai) nin bir elemanıdır ya da özel bir null değerdir. İlişkisel veri
modelinde bir ilişki örneği Şekil 4.1'de verilmektedir. Bir ilişki r(R), domain'lerin
kartezyen çarpımlarının bir alt kümesidir ve aşağıdaki gibi gösterilir:
(dom(A1 ) X dom(A2) X ... X dom(An))
r(R)
Herhangi bir t zamanındaki bir ilişkinin örneği (instance) sadece geçerli tuple'ları
içerir ve bunlar gerçek minidünyanın özel bir anını yansıtırlar. Bütün tuple'lar
birbirlerinden farklıdır.
41
Bir ilişkisel veritabanı şeması S, ilişkisel şemaların kümesinden, S = {R1 , R2, … ,
R m}, ve bütünlük (integrity) kısıtlamalarından oluşur.
İlişkisel veritabanı şeması S'nin bir ilişkisel veritabanı örneği VT ilişki örneklerinin
bir kümesidir ve VT = {r1 , r2 , … , rn} dir. Burada her ri, R i'nin bir ilişkisel örneğidir ve
her r i o ilişki için tanımlı bütünlük kısıtlamalarını sağlar.
ŞEKİL 4.1 - İMALAT ilişkisi ve örnek nitelik ve tuple'ları
İMALAT(imalatçı, parça, proje) = şema
Bu ilişkinin derecesi 3, kardinalitesi 7 ve tüm tuple'lar birbirinden farklıdır. Bu
ilişki üzerinde tanımlanmış kuralların tümünü şöyle sıralayabiliriz:
•
Her nitelik farklı isimli olmalıdır.
•
Her niteliğin ismi olmalıdır.
•
Her tuple farklı olmalıdır.
•
Bu modelde takip niteliklerin aldığı veriler üzerinden olmalıdır.
•
Kullanıcıya yanıt olarak gelen tuple'lar belli bir sıraya göre değildir.
•
Nitelikler herhangi bir sırada olabilirler.
•
Sorgu dilinin sonucunda elde edilecek ilişkiler de bu kurallara uyarlar.(Burada
kastedilen ilişkisel cebir sorgularıdır.)
4.1.2 İlişkilerde Güncelleme İşlemleri
Giriş (insert): İlişkiye yeni tuple'ların girilmesi işlemi
Silme (delete): İlişkiden tuple'ların silinmesi işlemi
42
Değiştirme (modify): Bazı niteliklerin değerlerinin değiştirilmesi işlemi bu
operasyonlar sırasında ilişkisel veritabanı şeması üzerinde tanımlı bütünlük
kısıtlamalarının çiğnenip çiğnenmediği kontrol edilmek zorundadır.
4.2 İşleme (Manipulation) İşlemleri (İlişkisel Cebir İşlemleri)
•
Seçme (select) işlemi
•
Projeksiyon (project) işlemi
•
Kartezyen çarpım (cartesian product) işlemi
•
Birleştirme (join) işlemi
•
Toplama (union) işlemi
•
Kesiştirme (intersect) işlemi
•
Çıkarma (difference) işlemi
•
Bölme (division) işlemi
Bu operasyonların sonucu yine bir ilişkidir. Şimdi bu operasyonlara örnekler
verelim.
Örnek: Yeni bir tuple'ın ilişkimiz İMALAT'a girişini SQL kullanarak şu şekilde
yapabiliriz:
INSERT INTO İMALAT (İmalatçı, parça, proje)
VALUES (Hasan, kalem, proje2)
Örnek: İmalatçı ismi 'Hasan' olan tüm tuple'ları silme işlemini şu şekilde
yapabiliriz:
DELETE
FROM İMALAT I
WHERE I.imalatçı = 'Hasan'
Örnek: İMALAT ilişkisinde bir tuple'ı değiştirme işlemini şu şekilde yapabiliriz:
UPDATE IMALAT
SET parça='kalem'
43
WHERE İmalatçı = 'Ali' AND proje = 'proje2'
Değiştirme operasyonu bir tuple'daki bir ya da daha fazla niteliğin değerini
değiştirmek istediğimizde kullanılır. Değiştirme operasyonlarından oluşan ilişkisel
cebir operasyonlarını şimdi örneklerle gösterelim
4.2.1 Seçme Operasyonu
Seçme operasyonunun gösterim şekli:
<şart>
(R)
R: ilişkinin ismidir.
<şart> : seçme koşullarıdır.
Örnek:
<imalatçı='Hasan'>
(İMALAT)
Sonuç ilişki :
İMALAT
imalatçı parça proje
Hasan
cetvel proje3
4.2.2 Projeksiyon Operasyonu:
Projeksiyon operasyonunun gösterim şekli:
Örnek:
<imalatçı, parça>(İMALAT)
Sonuç ilişki: İMALAT
imalatçı parça
Ali
kalem
Ali
cetvel
Adem
kalem
Hasan
cetvel
Adem
silgi
44
<niteliklerin listesi>(R)
Örnekte de görülebileceği gibi projeksiyon operasyonunun sonundaki ilişkide
tüm tupleların birbirinden farklı olduğunu garanti etmeliyiz.
4.2.3 Kartezyen Çarpımı:
Bu operasyonun gösterim şekli şu şekildedir: R1 X
R2 (Burada R 1 ve R2 iki ayrı ilişkidir.)
Örnek: ÖĞRENCİ
Ö_no a_dersler
HOCA
101
DB
h_no v_dersler
101
AI
201
DB
102
DB
202
AI
ÖĞRENCİ X HOCA
ö_no a_dersler h_no v_dersler
101
DB
201
DB
101
DB
202
AI
101
AI
201
DB
101
AI
202
AI
102
DB
201
DB
102
DB
202
AI
Kartezyen Çarpımı operasyonu iki ilişkideki tupleları bir ilişkide bir araya getirir.
Böylece ilişkili tupleları tanımak mümkün olur. Genel olarak, R(A1, ... , An) X S(B 1, B2
, ..., B m)'in sonucu bir Q ilişkisidir ve n+m nitelikten oluşur, Q(A1 , ... , A n, B1 , ... , Bm
). Eğer R ilişkisinde nr ve S ilişkisinde ns tuple varsa, sonuç Q ilişkisinde nr * n s tuple
olacaktır.
Genel olarak Kartezyen Çarpımı operasyonu kullanıldıktan sonra seçme operasyonu
ile ilişkili tuplelar seçilir. Bundan dolayı yeni bir operasyon olarak birleştirme (JOIN)
operasyonu bu amaç için kullanılmak üzere tanımlanmıştır. Kartezyen Çarpımı
operasyonunun kendi başına bir anlam taşıdığı durumlar çok azdır.
4.2.4 Birleştirme Operasyonu (JOIN)
Bu işlemin gösterimi şu şekildedir:
45
R
1
<şart>
R
2
Burada <şart>
{= ,
,>,
,<,
}
Birleştirme operasyonu iki ilişkideki ilişkili tupleları tek bir ilişkide toplar.
R1
<şart>
R2
<şart>
(R1 X R 2)
Sonuç şema kartezyen çarpımdaki ile aynıdır. Kartezyen çarpımından daha az
sayıda tuple ile sonuçlanabilir. Bu yüzden daha etkin hesaplanabilir. Birleştirme
operasyonu bu hali ile Teta-Join olarak bilinir. Teta-join dediğimiz birleştirme türünün
özel bir hali Equi-Join olarak bilinir, bu birleştirmede <şart> her zaman eşitlik olarak
uygulanır.
Örnek : Bu örnekte birleştirme şartı olarak '=' i kullanacağız.
ÖĞRENCİ
<Öğrenci.a_dersler = Hoca.v_dersler>
HOCA
Ö_no
A_dersler H_no
V_dersler
101
DB
201
DB
101
AI
202
AI
102
DB
201
DB
Örnekte görüldüğü üzere, ÖĞRENCİ ilişkisindeki A_dersler niteliği ile HOCA
ilişkisindeki V_dersler niteliği kullanılarak bu iki ilişkideki ilişkili tuple'lar sonuç
ilişkisinde yer almışlardır. Doğal Birleştirme: Equi-join operasyonunun özel bir hali
olup, iki ilişkideki ortak nitelikler üzerine uygulanır ve sonuç şemada sadece
birleştirme niteliklerinden birinin kopyası tutulur.
Örnek:
R1
R2
R1 *R2(Doğal Birleştirme)
46
sno issim
sno yaş proje
p
sno yaş proje
p
isim
m
20
A
Ali
2
20
41
p1
20
25
V
Veli
2
26
45
p2
2
28
20
p1
41
p
p1
Ali
4.2.5 Toplaama (U), Kesiştirme
K
( ) ve Küm
me-Çıkarma (-) Operaasyonları
Bütün bu operasyon
nlar iki illişkiyi gird
di olarak alır, ancak
k bu ilişk
kilerin
topllama-benzeeri olmak zorunluluğu vardır. İki ilişkin
nin toplam
ma-benzeri olma
özellliği için ikii şart mevccut olmak zorundadır
z
r:
•
İki ilişk
kide de ayn
nı sayıda niitelik olmallıdır.
•
Birbiriine karşı geelen nitelikller aynı tip
pte olmak zorundadır..
Bu üç operasyyon için aşaağıdaki örn
neği verelim
m:
R1
R2
no
isim
m
y
yaş
no
isim
yaş
20
Ali
45
25
Murat
35
30
Veli
55
30
Veli
55
50
Hasann
35
40
Selim
35
50
Hasan
35
4.2.6 Bölm
me (/)
Bu operasyyon temel operasyonl
o
lardan biri değildir an
ncak "bölü
ümdeki derrslerin
tüm
münü alan öğrencilerii bulun" giibi sorgula
ara yanıt vermede ku
ullanılırlar. Eğer
R1 iki
i niteliğe (x ve y) ve R2 yalnızca y niteliğin
ne sahipse,,
R1 / R2 = {<x> |
<x,y>
R1 <y>
47
R 2}
Yani, R1 /R2 bütün x tuple'larını içerir, öyle ki R2 'deki her y tuple'ı için R1 'de
xy tuple'ı vardır.
Örnek:
A
S1
Ad
A
A
A
A
B
B
C
D
D
No
1
2
3
4
1
2
3
2
4
A/S 1
Ad
A
B
C
D
S2
no
2
A/S 2
Ad
A
D
no
2
4
S3
no
1
2
3
4
A/S 3
Ad
a
İlişkisel cebirin temel operasyonları ya da fonksiyonel tamam seti aşağıdaki
operasyonlardan oluşur.
•
Seçme (
)
•
Projeksiyon (
•
Kartezyen Çarpımı (X)
•
Küme Farkı (-)
•
Toplama (ya da Kesiştirme) (U) ya da ( )
)
Her operasyon bir ilişkiyi döndürdüğü için operasyonlar birleştirilebilir(bir
arada kullanılabilir).
Örnek Sorgu:
Daha önce çalıştığımız Öğrenci, Hoca ilişkilerini tekrar burada kullanalım.
"201 nolu hocanın verdiği dersleri alabilecek öğrencilerin numaralarını
getiriniz."
48
ö_no
((
h_no=201
Hoca)
Öğrenci)
Sonuç:
Ö_no
101
102
Örnek Sorgu: "101 ya da 102 nolu öğrencilerin aldıkları derslerin hocaların
numaralarını ve verdikleri dersleri getiriniz."
h_no,v_dersler
((
(ö_no=101 V ö_no=102)
Öğrenci)
Hoca
Sonuç:
H_no
V_dersler
201
DB
202
AI
4.2.7 Dışsal Birleşme
SOL dışsal-birleştirme: SAG dışsal-birleştirme:
DIŞSAL-birleştirme:
DIŞSAL-Toplama:
4.3 Bir İlişkinin Anahtar Nitelikleri
•
süper anahtar (superkey): Bütün tuplelarının farklı olduğu niteliklerin
kümesidir. ti [SA]
•
t j[SA] 1
i, j n .
anahtar (key): Süper anahtarın minimalidir, yani herhangi bir niteliği dışarı
çıkartamayacağımız bir süper anahtardır. Bu anahtarın değerleri ilişkideki
tupleları belirlemede kullanılır.
•
aday anahtar (candidate key): bir ilişki şemasında birden fazla anahtar varsa
bunların herbirine denir.
•
birincil ya da temel anahtar (primary key): aday anahtarlardan birisinin
seçilmesi durumunda seçilmiş olanıdır. Bu seçimde her ne kadar daha az nitelik
49
içeren kümenin seçilmesi tercih edilir. Bu temel anahtar niteliklerin altı çizili
olarak belirtilirler.
4.4 Bir İlişkisel Veritabanı Şemasındaki Bütünlük Kısıtlamaları
•
Anahtar Kısıtlaması: Her ilişki şemasındaki aday anahtar nitelikleri belirtir ve
herhangi bir ilişki örneğindeki her tuple için bu niteliklerin değerleri tek olmak
zorundadır.
•
Varlık (entity) Bütünlük Kısıtlaması: Hiçbir birincil anahtar değeri boş olamaz.
•
Referanslı (referential) Bütünlük Kısıtlaması: Eğer bir ilişkideki bir tuple öteki
bir ilişkiye referans ediyorsa o ilişkide var olan bir ilişkiye referans etmek
zorundadır. Bu kısıtlama iki ilişki arasında tanımlıdır ve bu ilişkilerdeki tuplelar
arasındaki tutarlılığı sağlamaya çalışır. İki ilişki arasındaki referanslı bütünlük
kısıtı yabancı anahtar (foreign key), fk, şartı ile belirtilir. Eğer R1 'deki bir
nitelikler kümesi aşağıdaki şartları sağlarsa, bunlar R 1 için fk'dir:
R1'deki fk'nin ve referans ettiği R 2'deki pk'nin nitelikleri aynı alan değerlerine
sahipse o zaman fk nitelikleri R2 ilişkisine referans ediyor demektir
R1 'deki bir t1 tuple'ındaki fk değeri ya R2'deki t2 tuple'ındaki pk'nin değeri
olarak vardır ya da boştur(null). İlk seçenekte, t1 [fk] = t2 [pk] dir ve t 1 tuple'ı t2
tuple'ına referans ediyor denir.
•
Anlamsal bütünlük kısıtı: Değişik şekillerde olabilir. Örnek: "Bir mühendis bir
projede haftada 60 saatten fazla çalışamaz."
Örnek:
ŞEKİL 4.2 - Referanslı bütünlük kısıtlamasına örnek
50
ö_no niteliği Kayıt_Dosya ilişkisinde yabancı anahtar, öğrenci ilişkisinde birincil
anahtardır. Kayıt_Dosya ilişkisinin birincil anahtarı {ö_no, d_no} dur.
Referanslı bütünlük kısıtını sağlamak için eğer öğrenci ilişkisinde olmayan bir
öğrencinin Kayıt_Dosya'ya girmek istemesinin reddedilmesi gereklidir. Günümüz
VTYS'lerinin önemli bir kısmı bunu sağlayabilmektedir.
Varlık bütünlük kısıtı ile ö_no değeri olmayan bir öğrencinin öğrenci ilişkisine
girişinin yapılamaması kastedilmektedir.
51
5 VTYS Dili
5.1 SQL (Structured Query Language - Yapısal Sorgu Dili)
•
Sorguların etkin bir şekilde değerlendirilmesi VTYS'nin sorumluluğundadır.
•
Optimizasyon (eniyileyici) operasyonları gerekirse tekrar sıralar ve yanıtların
değişmeyeceğini garanti eder.
•
En çok kullanılan yaygın ilişkisel sorgu dili, günümüz standardı olan SQL92'dir.
Temel SQL sorgusu aşağıdaki sözdizimi ile gösterilebilir:
SELECT [DISTINCT] <nitelik_listesi>
FROM <ilişki_listesi>
WHERE <şartlar>
Burada [DISTINCT] opsiyonel bir anahtar sözcüktür ve yanıtlarda tekrarın
olmamasının istendiği durumlarda kullanılır.
<nitelik_listesi> ndeki nitelikler <ilişki_listesi> ndeki ilişkilerin nitelikleri olmak
zorundadır.
<ilişki_listesi> de ilişki isimlerinin listesini içerir.İlişki isimleri alan değişkenleri ile
de kullanılabilmektedir.
5.2 Kavramsal Değerlendirme Stratejisi
Bir SQL sorgunun anlamı aşağıdaki kavramsal değerlendirme stratejisi ile
tanımlanır.
•
<ilişki_listesi> ndeki ilişkilerin kartezyen çarpımı hesaplanır.
•
<şartlar> daki şartları sağlamayan tuplelar atılır.
•
<nitelik_listesi> nde olmayan nitelikler silinir.
•
Eğer DISTINCT sorgu cümleciğinde belirtilmişse, tekrarlanan tuplelar atılır.
52
Bu strateji herhalde olabilecek en yavaş sorgu yoludur! Kullanılan VTYS'nin
eniyileyicisi (optimizer) aynı yanıtı verecek olan çok daha etkin bir hesaplama
yöntemine sahiptir. Yukarıdaki sadece kavramsal bir değerlendirmedir.
Bu kavramsal değerlendirmeyi aşağıdaki örnek için basamak basamak gösterelim:
SELECT Ş.isim, Ç.saat
FROM Şirket Ş, Çalışan Ç
WHERE Ş.sicil_no = Ç.sno AND Ç.saat = 8
<Şartlar> AND, OR ve NOT mantık bağlaçları ile kullanılabilirler ve “Nitelik OP
Sabit” ya da “Nitelik1 OP Nitelik2” şeklinde değişik şartlar belirtebilmek mümkündür.
Burada OP <, >,
,
, =, işlemlerinden biri olabilir.
örneklerin temel alacağı örnek ilişkiler aşağıdaki gibi olsun:
ŞİRKET
Sicil_no İsim
Maaş
20
Ali
150
30
Veli
170
50
Hasan
150
PROJE
Proje_no
Proje_ismi Proje_adr
100
A
İstanbul
200
B
Ankara
300
C
Ankara
ÇALIŞAN
Sno
Pno
Saat
20
100
8
30
100
8
50
200
10
53
Şirket ile Çalışan ilişkilerinin kartezyen çarpımı
Sicil_no İsim
Maaş
Sno
Pno
Saat
20
Ali
150
20
100
8
20
Ali
150
30
100
8
20
Ali
150
50
200
10
30
Veli
170
20
100
8
30
Veli
170
30
100
8
30
Veli
170
50
200
10
50
Hasan
150
20
100
8
50
Hasan
150
30
100
8
50
Hasan
150
50
200
10
“Ş.sicil_no = Çsno AND Ç.saat = 8” şartını sağlamayan tuple’lar atılır.
Sicil_no İsim
Maaş
Sno
Pno
Saat
20
Ali
150
20
100
8
30
Veli
170
30
100
8
Ş.isim ve Ç.saat dışındaki nitelikler silinir.
İsim Saat
Ali
8
Veli 8
DISTINCT sorgu cümleciğinde belirtilmemişti, ancak belirtilmiş bile olsaydı sonuç
değişmeyecekti. Bu dille verilerin tanımı, manipulasyonu ve güncellemesi yapılabildiği
için hem VTD (DDL) ve hem VID (DML)’dir. Kısaca SQL bir sorgu dilinde olabilecek
özelliklerden daha fazlası vardır.
SQL’in veri tanımı: Bazı sorguların sözdizimi sistemden sisteme değişir. Buna
dikkat etmekte yarar vardır.
54
CREATE TABLE Proje
Proje isimli bir ilişkiyi yaratır.
(proje_no: INTEGER,
Üç niteliğin ismi ve tipleri
proje_ismi: CHAR(15),
gösterilir.
proje_adı: CHAR(30))
ALTER TABLE Şirket
Şirket tablosu yeni bir nitelik
ADD COLUMN isim
(isim) eklenerek değiştirilir ve
CHAR(20)
değerlerini NULL olarak
yazar.
DROP TABLE Çalışan
Çalışan tablosunu yok eder.
CREATE INDEX
Bu bir B+_tree dizini yaratır
Projeİnd
ve (proje_ismi) arama anahtarı
ON Proje (Proje_İsmi)
olarak adlandırılır.
5.3 SQL’e Sorgu Örnekleri
SELECT *
FROM Şirket
WHERE sicil_no = 50
Bu sorgunun sonucunda seçilen tuple’lar tüm nitelikleri içerir. * kullanılınca o
ilişkideki niteliklerden hiç biri dışlanmaz.
SELECT isim, proje_adr
FROM Şirket, Proje, Çalışan
WHERE isim = ‘Ali’ AND proje_no = pno AND sicil_no = sno
Bu sorgudaki isim=’Ali’ şartı önceki bölümde gördüğümüz ilişkisel cebirdeki
seçme operasyonuna, proje_no = pno şartı ise birleştirme operasyonuna karşılık gelir.
55
SELECT
kısmında
belirtilen
isim,
proje_adı
ilişkisel
cebirdeki
projeksiyon
operasyonuna karşılık gelir.
SELECT Ş.maaş*1.1
FROM Şirket Ş
WHERE Ş.isim LIKE ‘A_%I’
Bu örnek aritmetik operasyonlarına ve karakter şeridinin örneğinin (pattern)
bulunmasını göstermektedir. Bu sorguda ismi ‘A’ ile başlayan, I ile biten en az üç
karakterden oluşan isimli şirket elemanının maaşı 1.1 ile çarpılıp gösterilsin isteniyor.
SELECT DISTINCT maaş
FROM Şirket
Farklı maaşları alıp getirir.
Örnek:
SELECT sno
FROM Çalışan
WHERE saat=8
UNION
SELECT sno
FROM Çalışan
WHERE saat=10
Sonuç ilişki tuple'ların kümesini içerir. UNION, INTERSECT gibi operasyonlar
toplama-uyumlu (union-compatible) ilişkilere uygulanabilir. İçiçe geçmiş sorgular ve
küme karşılaştırmaları SQL'in güçlü özelliklerindendir.
SELECT DISTINCT isim
FROM Proje
WHERE proj-no IN ( SELECT pno
FROM Çalişan, Şirket
WHERE sno=sicil-no AND isim="Hasan")
Burada önce şirketten Hasan'ı seçer, daha sonra birleştirme operasyonunu
kullanarak bir projede çalıştığını bulur. Eğer her tuple için proj-no değeri içiçe geçmiş
sorguda varsa o projeyi seçer ve ismini sonuç olarak yazar. "IN" bir küme karşılaştırma
operasyonudur.
56
5.4 SQL'de EXIST Fonksiyonu
"Şirketteki çalışanlardan, çalışma süresi 8 saat olmayanların isimlerini getir"
SELECT DISTINCT isim
FROM Şirket
WHERE NOT EXISTS (SELECT *
FROM Çalışan
WHERE sno=sicil_no AND saat=8)
SQL'de IN ve EXIST gibi küme karşılaştırma operasyonlarından başka birçok
operasyon vardır. Bunlar:
IN, NOT IN, EXIST, NOT EXIST, UNIQUE, NOT UNIQUE, op ANY, op ALL (op :
<, >,
,
, =, ).
SELECT *
FROM Çalışan Ç1
WHERE Ç1.saat > ANY (SELECT Ç2.saat FROM Çalışan Ç2 WHERE
Ç2.saat = 8)
Bu sorgu bir projede 8 saat çalışan bir çalışandan daha fazla çalışanları listeler.
5.5 Toplama (Aggregation) Fonksiyonları ve Gruplama (Grouping)
COUNT, SUM, MAX, MIN, AVG.
Bu operasyonları ilişkisel cebirin önemli bir genişletilmesi olarak görebiliriz.
SELECT [DISTINCT] <nitelik listesi>
FROM <ilişki listesi>
WHERE <şartlar>
GROUP BY <grup listesi>
HAVING <grup şartları>
SELECT SUM(maaş), AVG(maaş)
FROM Şirket
SELECT proje_no, COUNT(*)
FROM proje - GROUP BY proje-no
57
Her bölüm için bölüm numaralarını ve bölümde çalışanların sayısını verir.
HAVING sadece GROUP BY ile kullanılır ve gruplanmış tuple'lar üzerinde bir şart
konulması durumunda kullanılır.
SELECT proje_no, proje_ismi, COUNT(*)
FROM Proje, Çalışan - WHERE proje_no = pno
GROUP BY proje_no, proje ismi
HAVING COUNT(*) > 2
Herhangi bir projede iki taneden fazla çalışan varsa o zaman projenin ismini ve
numarasını ve o projede çalışanların sayısını verir.
SQL sorgusunun sonucu istenen bir sırada gelmesi isteniyorsa ORDER BY komutu
kullanılır.
SELECT …
FROM … WHERE … ORDER BY pno DESC, proje_isim ASC
5.6 Güncelleme Operasyonları
INSERT INTO Proje
VALUES ('233', 'projeZ', 'Ankara')
UPDATE Proje
SET proje_adr = 'Samsun'
WHERE proje_no = 233
Bu güncelleme operasyonlarında görüldüğü gibi yeni bir tuple girişi için INSERT
INTO, var olanı değiştirmek için UPDATE … SET kullanılır.
CREATE VIEW Çalışan1
AS SELECT isim, proje_no, proje_ismi, saat
FROM Proje, Çalışan, Şirket
WHERE proje_no = pno AND sicil_no = sno
İstenen bir görünüşü yaratmak için CREATE VIEW kullanılır. Bu örnekte Çalışan1
isimli üç tablonun birleştirilmesinden oluşan bir görünüş yaratılmış olur. Bu görünüş
istenildiği takdirde silinebilir. Görünüşlerin güncellenmesinde dikkat edilecek bazı özel
durumlar vardır.
58
6 Veri Tabanı Tasarımı
6.1 Veri Tabanı Tasarımı
İlişkisel
şemalardaki
birçok
problemin
temelinde,
verilerde
oluşabilecek
tekrarlanma (redundancy) vardır. Bunlar depolamada tekrarlama, girme /silme
/güncelleme yanlışlarıdır.
Tutarlılık kısıtları, özellikle fonksiyonel bağımlılıklar, şemada oluşabilecek bu tür
problemleri tespit etmede ve düzeltmede kullanılmaktadır.
En önemli düzeltme tekniği ayrıştırmadır, yani ABCD’den oluşan bir şemayı AB ve
ACD olarak iki(ya da daha fazla) şemaya ayrıştırmaktır.
Ancak ayrıştırmayı temkinli bir şekilde uygulamak çok önemlidir. Örneğin bir
ilişkinin ayrıştırılması için nedenin ne olduğunu, hangi problemlere yol açabileceğini
iyi düşünüp ona göre bir yöntem izlemek gerekmektedir.
Ayrıştırmanın değişik formlarını çalışmadan önce iyi bir veri tabanı tasarımı için ne
tür ölçütlerimizin olduğunu verelim.
6.2 İyi Bir İlişkisel Şema Tasarımının Ölçütleri
1. Niteliklerin anlamları: Bir tuple’daki nitelik değerlerinin birbirleriyle olan
ilgilerini gösterir ya da bu değerleri nasıl değerlendirmemiz gerektiğini belirtir.
Ölçüt 1: İyi bir ilişkisel şemanın tasarımı için o şemanın verdiği anlam açık
seçik olmalıdır. Bir ilişki şemasının ER diyagramındaki bir nesne tipine ya da
ilişki tipine karşılık gelmesi, o ilişkinin anlamsallığının açık olması demektir.
Bundan dolayı değişik nesnelerin niteliklerini birbirine karıştırmamaya dikkat
etmeliyiz.
2. Tuple’lardaki fazladan bilginin tutulması ve güncelleme problemleri: İyi
bir tasarımdan amaçlananlardan birisi de ilişkilerin tutulduğu depolama alanının
mimize edilmesidir. Ayrıca tasarlanan şema güncelleme problemlerine olanak
vermemelidir. Bu problemler şunlardır:
o
Giriş problemleri (insertion anomalies)
59
o
Silme problemleri (deletion anomalies)
o
Değiştirme problemleri (modification anomalies)
o
Giriş problemleri (insertion anomalies)
o
Değiştirme problemleri (modification anomalies)
Ölçüt 2: Öyle temel ilişki şemaları tasarlamalıyız ki ilişkilerde herhangi bir
girme, silme, değiştirme problemi oluşmasın. Eğer bu problemlerden herhangi
biri engellenemiyorsa, bu not edilmeli ki güncelleme yazılımları doğru bir
şekilde çalışabilsin.
3. Tuple’lardaki bilinmeyen (null) değerler: Üç değişik bilinmeyen değerden
söz edebiliriz:
o
Bilinmeyen (unknown)
o
Bilginin olmadığı biliniyor (do not exist)
o
Herhangi bir bilgi yok (no information)
Ölçüt 3: Temel ilişkiler bilinmeyen değerler alabilecek nitelikleri mümkün
olduğunca içermemelidir. Eğer bu mümkün olamıyorsa, bilinmeyen değerlerin
yalnızca özel durumlarda olduğunu ve tuple’ların büyük bir bölümünde
olmayacağını gözetlemeliyiz.
4. İlave tuple’lar: Ana ilişkide olmayan fakat birleştirme (join) operasyonuyla
elde edilen ek tuple’lardır. Bu tuple’lar geçerli olmayan yanlış bilgiler içerirler.
Bundan dolayı bu tür tuple’ların oluşmayacağından emin olmalıyız.
Ölçüt 4: Tasarlanan ilişkiler şemasında ilişkiler arasında nitelikler üzerinde
eşitlik şartıyla birleştirme yapıldığında ilave tuple’ların elde edilmeyeceği
garanti altına alınmalıdır. Bunun için bütün birleştirme operasyonlarındaki
birleştirme nitelikleri ana anahtar (pk) ya da yabancı anahtar (fk) olmalıdır.
6.3 Fonksiyonel Bağımlılık
Tanım: Fonksiyonel bağımlılık, X --> Y olarak gösterilir. X ve Y nitelik
kümelerini gösterir ve ilişki örneklerini içeren r’nin tuple’ları üzerinde bir kısıtlama
şartını belirtir. Bu şart şudur: X --> Y durumunda r’deki herhangi iki tuple t1 ve t2
60
olsun. Eğer t1[X] = t2[X] ise, o zaman t1[Y] = t2[Y] dir. Bunun anlamı şudur: Bir
tuple’daki X nitelikler kümesinin değerleri Y nitelikler kümesinin değerlerini eşsiz
olarak belirler.
FD için özel bazı çıkarım kurallarıyla verilen FD’lerden yeni FD’ler çıkarabiliriz.
Bu kurallar şunlardır:
1. Eğer X
Y ise, o zaman X --> Y dir
dönüşlülük (reflexivity) kuralı
2. {X --> Y} |= XZ --> YZ
çoğaltma (augmentation) kuralı
3. {X --> Y, Y --> Z} |= X --> Z
geçişlilik (transitivity) kuralı
4. {X --> YZ} |= X --> Y
ayrıştırma (decomposition) kuralı
5. {X --> Y, X --> Z} |= X --> YZ
toplama (union) kuralı
6. {X --> Y, WY --> Z} |= WX --> Z
yalancı geçişlilik (pseudotransitivity) kuralı
İlk üç FD Armstrong Kuralları olarak bilinir. Bunlar doğru(sound) ve tamdır
(complete).
Bir fonksiyonel bağımlılığın, uygulamanın anlamından çıkarılması şarttır.
X’in R ilişkisi için aday anahtar olmasının anlamı X --> R dir. Ancak X --> R,
X’in minimal olduğu anlamını vermez. Yani, eğer R ilişkisi {X, S, N, M, L, K} dan
oluşuyorsa ve X de bir anahtarsa, o zaman X --> SNMLK dır. Daha önce de
belirttiğimiz gibi, aday anahtarlardan biri birincil anahtar olarak seçilir ve NULL
değerleri alamaz.
Birincil anahtarı SQL dilini kullanarak VTYS’ye şu şekilde tanıtırız:
CREATE TABLE Öğrenci
(ö_no INTEGER NOT NULL,
ö_isim CHAR(10) NOT NULL,
yaş INTEGER,
PRIMARY KEY (ö_no)
61
UNIQUE (ö_isim))
Eğer ö_isim niteliğinin Öğrenci ilişkisi için aday anahtar olduğuna karar vermişsek
bunu UNIQUE ile VTYS’ye tanıtırız.
Bu arada yabancı anahtarı VTYS’ye nasıl tanıtabileceğimizi de bir örnekle
göstermek istiyoruz. Burada Dersler ve Öğrenci ilişkilerini kullanalım.
CREATE TABLE Öğrenci
(ö_no INTEGER NOT NULL,
ö_isim CHAR(10) NOT NULL,
dno INTEGER,
yaş INTEGER,
PRIMARY KEY (ö_no)
UNIQUE (ö_isim)
FOREIGN KEY (dno)
REFERENCES Dersler)
Tuple’lardaki tekrarlanmış bilgi ve güncelleme problemlerini bir örnek üzerinde
açıklayalım.
Bir ilişkide gereksiz niteliklerin olmasından dolayı depolanmış bilgiler çok artar.
Örneğin; Şirket_Bölüm adında bir ilişki yaratırsak, bu ilişkinin aşağıda verilen şeması
ile Şirket ve Bölüm ilişkilerinin şemalarını ve tuttukları bilgileri karşılaştırırsak
tekrarlanan bilgileri farkederiz.
ŞİRKET_BÖLÜM
isim
no
adres
no
isim
b-yön-no
Ali
100
a1
5
A
101
Veli
101
a2
5
A
101
Hasan
102
a3
4
B
108
Osman
103
a3
4
B
108
Cem
104
a4
5
A
101
62
Can
105
a5
5
A
101
Deniz
108
a4
4
B
108
ŞİRKET
BÖLÜM
Şisim
Şno
adres
bno
Ali
100
a1
5
Veli
101
a2
5
Hasan
102
a3
4
Osman 103
a3
4
Cem
104
a4
5
Can
105
a5
5
Deniz
108
a4
4
bno
bisim
b-yönno
5
A
101
4
B
108
Görüleceği üzere Şirket_Bölüm ilişkisinde Bölüm ile ilgili (bno, bisim, byön_no)
bilgileri tekrarlanmış ve bu da depolamanın gereksiz artmasına yol açmıştır.
Şimdi diğer olası problemleri fonksiyonel bağımlılıkları gözönüne alarak tartışalım.
Farzedelim ki aşağıdaki fonksiyonel bağımlılıklar Şirket_Bölüm ilişkisinde olsun.
{şno --> {adres, bno, isim}, bno --> {bisim, byön_no}}
•
Giriş Problemi: Yeni bir çalışanın Şirket_Bölüm ilişkisine girişini yapabilmek
için ya tüm niteliklerin değerini gireceğiz ya da null bırakacağız. Örneğin;
bölüm no’su 5 olan bir çalışan girişi için bölümü ile ilgili tüm bilgileri doğru
olarak girmek zorundayız. Fakat Şirket ve Bölüm ilişkileri alternatifinde bunları
dert etmek zorunda değiliz. Buna ilave olarak, eğer bir çalışanı Şirket_Bölüm
ilişkisine girmek istediğimizde bölüm yöneticisinin ismini bilmiyorsak (bno -->
byön_no) ne yapacağız?
•
Silme Problemi: Bu problem giriş problemi ile ilintilidir. Şirket_Bölüm
ilişkisinde sileceğimiz bir çalışan belli bir bölümde çalışan son kişi ise o zaman
o bölümle ilgili bilgileri kaybetmek durumuyla karşı karşıya kalacağız. Halbuki
Şirket ve Bölüm olarak iki ilişkimiz olduğunda böyle bir problem olmaz.
63
•
Güncelleme Problemi: Şirket_Bölüm ilişkisinde bir bölüm hakkında (örneğin
bölüm 5) bir değişiklik yapmak istersek, bu değişikliği tüm 5. Bölüm çalışanları
için tek tek düzeltmek zorundayız. Aksi halde veri tabanı tutarlı olmaz.
6.4 Çok-Verili Bağımlılık (MVD)
Tanım: Çok-Verili Bağımlılık X -->> Y olarak gösterilir, X ve Y nitelik kümelerini
gösterir ve bu da ilişki örneklerini içeren r’nin tuple’ları üzerinde bir kısıtlama şartını
belirtir. Bu şart şudur: Her ne zaman, iki bağımsız 1:N ilişkilendirilmesi A:B ve A:C
bütün kombinasyonları göstererek aynı ilişki R’de karıştırılmıştır, o zaman MVD
mümkündür.
Daha formal olarak: X -->> Y durumunda r’deki herhangi iki tuple t1 ve t2 olsun. Eğer t1[X]
= t2[X] ise, o zaman r ilişkisinde t3 ve t4 gibi iki tuple daha var olacaktır ve aşağıdaki özelliklere
sahip olacaktır:
t1[X] = t2[X] = t3[X] = t4[X]
t1[Y] = t3[Y] ve t2[Y] = t4[Y]
t1[R-X-Y] = t4[R-X-Y] ve t2[R-X-Y] = t3[R-X-Y]
Her ne zaman X -->> Y söz konusudur, X, Y’yi çoklu elde eder(multidetermines)
demektir. MFD için özel bazı çıkarım kuralları ise şunlardır:
1. Eğer X
Y ise, X -->> Y dir
2. Eğer {X -->> Y} ve W
FD için dönüşlülük (reflexivity) kuralı
Z ise, WX -->> YZ
dir
3. {X -->> Y, Y -->> Z} |= X -->> (Z – Y)
MFD için çoğaltma (augmentation) kuralı
MFD için geçişlilik (transitivity) kuralı
MVD için tamamlayıcılık (complementation)
4. {X -->> Y} |= { X -->> (R-(X U Y))}
kuralı
5. {X --> Y} |= {X -->> Y}
Kopyalama (replication) kuralı
6. Eğer {X -->> Y} ve W aşağıdaki özelliklerle
Birleşme (coalescence) kuralı
varsa
64
a) (W intersect Y) = boş b) W --> Z c) Y
Z
o zaman X -->> Z dir.
Örnek: Çalışan
Ç_isim
p_isim
bak_isim
Ali
P1
Ayşe
Ali
P2
Fatma
Ali
P1
Fatma
Ali
P2
Ayşe
Bu Çalışan ilişkisinde iki çok verili bağımlılık vardır. Bunlar ç_isim -->> p_isim ve
ç_isim -->> bak_isim dir. Dikkat edilirse bu ilişkide çalışanların ismi çalıştıkları
projenin ismini ve yine çalışanların ismi onların bakmakla yükümlü oldukları kişilerin
isimlerini çok verili olarak belirtmektedir. Bunun yanında p_isim ve bak_isim birbiriyle
ilişkili değildir.
6.5 Normalizasyon (Ayrıştırma)
Eğer bir ilişki belirli bir normal formda (3NF, BCNF, v.s.) ise, zaten bazı
problemlerin oluşabilmesi engellenebilmiştir. Bu yüzden şemanın daha fazla
ayrıştırılmasına gerek yoktur.
Örneğin R ilişkisi A1,…,An niteliklerini içersin. R’nin ayrıştırıması R’yi bir ya da
daha fazla ilişkiyle yer değiştirmektir. Öyle ki;
•
Her bir yeni ilişki şeması R’nin niteliklerinin bir alt kümesini içerir ve R’de
olmayan hiçbir nitelik bu yeni ayrıştırılmış şemalarda yer alamaz
•
Her R niteliği bu ilişkilerden birinin bir niteliği olarak gözükür.
R’nin ayrıştırılması ile ayrıştırmanın ürettiği ilişki şemalarının örnekleri (instances)
depolanır.
6.6 Normal Formlar
65
Bu kısımda öncelikle fonksiyonel bağımlılıkları, PK’yi temel alan formlar üzerinde
duracağız.
1NF (First Normal Form): Bütün niteliklerin kendi öz alanından (domain) aldığı
değerler atomik olmak zorundadır. İlişkisel veri tabanı modelinin temel kuralıdır ve her
nitelik ancak atomik veriler alabilir.
2NF (Second Normal Form): Eğer R’deki herhangi bir birincil olmayan
(non_prime) nitelik A, R’nin hiçbir anahtar niteliğine kısmi fonksiyonel bağımlı değilse
bu ilişki şeması 2NF’dir denir. Burada kısmi fonksiyonel bağımlılıktan şunu
anlamalıyız: Eğer X --> Y geçerli ise ve bir nitelik A X’in elemanı ise ve A, X’ten
çıkarıldığı halde söz konusu bağımlılık hala geçerli ise burada bir kısmi fonksiyonel
bağımlılık vardır.
Örnek:
ŞEKİL 6.1- 2NF'a örnek
3NF (Third Normal Form): Eğer R’deki herhangi bir birincil olmayan (nonprime) nitelik A, R’nin hiçbir anahtar niteliğine geçişli (transitively) fonksiyonel
bağımlı değil ve hali hazırda 2NF’da ise, bu ilişki şeması R 3NF’dadır denir. Burada
geçişli fonksiyonel bağımlılıktan şunu anlamalıyız: Eğer X --> Y ve R’nin herhangi bir
anahtarının altkümesi olmayan nitelikler kümesi Z söz konusu ve de X --> Y ve Y --> Z
birlikte geçerli olmamalıdır.
Daha genel bir tanım aşağıdaki gibi verilebilir:
Tanım: Eğer bir ilişki şeması R 3NF’da ise ve R’de bir fonksiyonel bağımlılık X -> A söz konusu ise, ya X R’nin bir süperanahtarıdır (superkey) ya da A R’nin
66
birincil niteliğidir (prime attribute). Birincil nitelik demekle anahtarı oluşturan
niteliklerin herbirini kastediyoruz.
Örnek:
ŞEKİL 6.2 - 3NF'a örnek
Bir
R
ilişkisinin
bağımlılıkların-korunması
3NF
ilişkilerine
kayıpsız-birleştirme
(dependency-preserving)
(lossless-join)
ayrıştırması
her
ve
zaman
mümkündür.
BCNF (Boyce Codd Normal Form): Eğer bir ilişki şeması R’de bir fonksiyonel
bağımlılık X --> A söz konusu olduğunda, X nitelikler kümesi R’nin süperanahtarı ya
da A, R’nin birincil niteliği ise, bu ilişki şeması R BCNF’dadır.
Örnek:
ŞEKİL 6.3- BCNF'a örnek
6.7 Ayrıştırma ile İlgili Problemler
67
Üç potansiyel problem olabilir. Bunlar:
1. Bazı sorgular daha fazla gerçekleştirim süresi gerektirir, yani daha pahalı
olurlar. Bu problemi ortadan kaldırmak ancak söz konusu sorgulara özgün bazı
önlemler alarak mümkündür.
2. Ayrıştırılmış ilişkilerin elde edilmiş örneklerinden orijinal ilişkinin örneğine
karşılık geleni tekrar elde edemeyebiliriz. Bu problem ancak kayıpsızbirleştirme garanti altına alınırsa ortadan kalkar.
3. Bazı
bağımlılıkların
sağlanıp
sağlanmadığını
kontrol
edebilmek
için
ayrıştırılmış ilişkilerin örneklerinin birleştirilmesi gerekebilir. Bu problem
bağımlılıkları-koruma garanti altına alınırsa ortadan kalkar.
Kısaca bu problemleri her zaman gözönüne almalıyız. İkilem verilerin
tekrarlanması ve buna bağlı problemler ile yukarıda özetlediğimiz olası problemlerdir.
6.8 İlişkisel Veri Tabanı Şema Tasarımı İçin Algoritmalar
Ayrıştırılan herbir ilişkinin yüksek dereceli normal formda olması o tasarımın iyi
olduğunu garanti etmez. İyi bir tasarım için normal formun yanında başka özelliklere de
bakmak gerekir.
7 Kavramsal Modelin Mantıksal Modele Dönüştürülmesi
68
7.1 ER’nin İlişkisel Modele Dönüştürmesinin Gerçekleştirimi
Adım 1 - Nesne tiplerinin dönüştürülmesi :
Herbir normal nesne E için bir ilişki R yaratılır. E’nin anahtar niteliklerinden biri
ilişki R için birincil nitelik (pk) olarak tayin edilir. Birleşik nitelikler için sadece
basitleri alınır.
Adım 2 - Zayıf nesne tiplerinin dönüştürülmesi:
Herbir zayıf nesne tipi W için, bir ilişki R yaratılır ve W’nin bütün nitelikleri bu
R’de içerilir. Ancak tanımlayıcı nesne tipinin anahtar niteliği de R’de yabancı nitelik,
fk(foreign key), olarak alınır. R’nin pk’si fk artı W’nin kısmi anahtar niteliğinin
kombinasyonundan oluşur.
Adım 3 - 5 - İlişkisel tiplerin dönüştürülmesi :
Adım 3: Her 1:1 ilişki tipi R için bu ilişkide olan nesneler E ve F için S ve T
ilişkileri belirlenir. Bu ilişkilerden biri seçilir, S olsun. T’nin pk’si S için fk olarak S’de
içerilir. Buna alternatif olarak bu iki ilişki bir tek ilişki olarak birleştirilir. Ancak bu
yaklaşım ilişkinin toptan (total) olması ve nesne tiplerinin başka ilişki içinde
olmamaları durumunda mümkündür.
Adım 4: Her 1:N ilişki tipi R için bu ilişkide olan nesneler E ve F için N tarafındaki
nesne tipini tespit ettikten sonra, diyelim E, S ve T ilişkileri belirlenir. Bu ilişkilerden N
tarafındakine ötekinin, T’nin, pk’yi fk olarak içerir. Ayrıca aynı ilişki S’ye 1:N ilişki
tipinde var olan tüm basit niteliklerde S’nin nitelikleriymiş gibi içerilir.
Adım 5: Her M:N ilişki tipi R için yeni bir ilişki Y yaratılır. Bu Y ilişkisine ilişki
tipi R’de olan tüm nesne tiplerinin pk’leri fk olarak içerilir. Bu fk’lerin kombinasyonu
Y’nin pk’sini oluşturur. Ayrıca aynı ilişki Y’ye bu ilişki tipinde var olan tüm basit
niteliklerde Y’nin nitelikleriymiş gibi içerilir.
Adım 6 - Çokverili niteliklerin dönüştürülmesi (her bir çokverili nitelik için
yeni bir ilişki kur): Herbir çok verili(multivalued) nitelik A için yeni bir ilişki S
yaratılır ve A ile birlikte A’nın bulunduğu nesne tipinin, diyelim E'nin pk’si de S’de
69
bulundurulur. S’nin pk’si A ile E’nin pk’sinin kombinasyonudur. Eğer A bir
birleşik(composite) nitelik ise o zaman sadece basit nitelikleri içerilir.
Adım 7 - Yüksek dereceli ilişkilerin dönüştürülmesi (herbir yüksek dereceli
ilişki için ayrı bir ilişki oluştur):Eğer ilişkinin derecesi üçlü(ternary) ise yapılacak
olan , adım 5’tekine benzerdir.
Adım 8 - ISA hiyerarşilerinin dönüştürülmesi (tek ilişkide toplanma olasılığına
karşın her farklı sınıf için bir ilişkinin oluşturulması söz konusudur):
ISA hiyerarşisinin ilişkisel modele dönüştürülmesi şu şekilde yapılabilir: Herbir alt
sınıfı, {S1, … , Sm} ve süpersınıfı C (C’nin niteliklerinin a1, … , an ve birincil
anahtarının k olduğunu farzedelim) birer ilişki şemasına dönüştürelim. Bir L ilişkisini C
sınıfı için oluşturalım ve şu niteliklerden oluşsun: Nitelikler(L) = {k, a1, … ,an} ve
birincil anahtar(L) = k olsun.
Herbir alt sınıf Si, 1<= I <= m, için bir Li ilişkisi yaratalım ve bunların nitelikleri de
şunlar olsun:
Nitelikler(Li) = {k} U {Si’nin nitelikleri} ve her Li’nin birincil anahtarı k olsun.
Burada
anlatılan
dönüştürmeden
farklı
şemalarla
sonuçlanabilecek
başka
dönüştürme biçimleri de vardır ve bunları başka kaynaklardan öğrenebilirsiniz. Şimdi
burada anlatılan dönüştürmeye parça parça örnekler verelim.
7.2 Örnek
Herhangi
bir
nesne
niteliklerince
tanımlanabilir
ve
diğer
nesnelerden
ayırdedilebilen bir gerçek-dünya nesnesidir. İlişkisel şemaya dönüştürülmesine bir
örnek verelim:
ŞEKİL 7.1 - ÇALIŞAN ilişkisi ve nesne tipi
70
SQL ile bu şemayı şu şekilde tanımlayabiliriz:
CREATE TABLE Çalışan
(çno CHAR(12),
isim CHAR(30),
yaş INTEGER
PRIMARY KEY (çno))
7.3 Örnek
ER’da ilişkiyi iki ya da daha fazla nesnenin birbiriyle olan ilintisi olarak
tanımlayabiliriz. İlişkisel bir şemaya dönüşümü için m-n(çok-çok) durumunu
örneklendirelim:
ŞEKİL 7.2 - M-N ilişki örneği
Dönüştürme algoritması aşağıdaki ilişkisel şemaları verir.
Çalışan
çno
çisim yaş
Çalıştığı
cno
Bno
bno
bisim
zaman
Bölüm
SQL’de sadece ÇALIŞTIĞI ilişkisinin yaratılmasını sunalım. Diğer şemaların
SQL ile gösterimi benzer şekilde yapılabilir.
71
CREATE TABLE Çalıştığı
(çno CHAR(12),
bno INTEGER,
zaman DATE,
PRIMARY KEY (çno, bno),
FOREIGN KEY (çno) REFERENCES Çalışan,
FOREIGN KEY (dno) REFERENCES Bölüm)
Hatırlanabileceği gibi zayıf nesne (weak entity) sahip (owner) nesnenin birincil
anahtarı kıullanılarak tanınabilinmekteydi. Sahip nesne ile zayıf nesne 1-n (bir-çok)
ilişki kümesi ile ilişkilendirilirler (bir sahip nesne, çok zayıf nesneler). Ayrıca zayıf
nesne kümesi toplam katılım kısıtı ile tanımlayıcı ilişki kümesinde yer alır.
7.4 Örnek
ŞEKİL 7.3 - Zayıf nesne örneği
Zayıf nesne kümesi ile tanımlayıcı ilişki kümesi bir tek tabloya dönüşür. Her ne
zaman sahip nesne silinirse, bütün sahip olduğu zayıf nesneler de silinmek
durumundadır.
SQL’de şu şekilde sunulur:
CREATE TABLE Bağlılık
(bismi CHAR(30),
yaş İNTEGER,
çno CHAR(12) NOT NULL,
PRIMARY KEY (bismi, çno),
FOREIGN KEY (çno) REFERENCES Çalışan,
ON DELETE CASCADE)
72
7.5 Üçlü İlişkinin İlişkisel Şemaya Dönüştürülmesi
ŞEKİL 7.4 - Üçlü ilişkiye örnek
7.6 ISA Hiyerarşilerine Örnek
ŞEKİL 7.5 - IS-A'ya örnek EER örneği
Burada; Çalışan ISA Saatli Çalışan
Çalışan ISA Kontratlı Çalışan
Bu ER diyagramını ilişkisel şemaya dönüştürürsek aşağıdaki ilişkileri elde ederiz.
ÇALIŞAN
çno
çismi Yaş
SAATLİÇALIŞAN
çno
Saatli_maaş
çalıştığı_saat
KONTRATLIÇALIŞAN
çno
Kontrat_no
73
KAYNAKÇA
1- Aydın, E.d. Veri Tabanı, Alfa Basım Yayın, 2000.
2- Çankaya, M. Nuri. Veritabanı Bağlantısı, 2000.
3- Çubukçu, Faruk. Asp 3.0 ile Veri Tabanı Yönetimi, Alfa Basım Yayın, 2000.
4- Unutur, M. Şakir. Visual Basic ve Database, Arkadaş Yayınları, 2000.
74
Download