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