VERİTABANI-I DERS NOTLARI ENVER BAĞCI Ders İçeriği Veritabanı ve ilişkisel veritabanı kavramı, tasarımı ve yönetimini anlamak, Veri tabanı sistemlerinin denetimi ve erişimi yöntemlerini ve araçlarını öğrenmek, (SQL komutlarının kullanımı) Verilecek teori bilgiler temelinde VTYS uygulamalarını SQL Server programı ile yapmaktır. Ders Takibi Ders ile ilgili dökümanlara www.enverbagci.net adresinden "Veri Tabanı 1" ilgili ders linkine tıklatılarak ulaşılabilir. VERİTABANI TEMELLERİ İşlenecek Konular Veri Nedir? Veritabanı tanımı, önemi, kullanım alanları, özellikleri? Veritabanı Yönetim Sistemleri tanımı, Kullanılan VTYSler ve aralarındaki farklar, VTYS Özellikleri, Veri Modelleri, Veritabanı Tasarımı, E-R Modeli. Veri nedir? Olguların, kavramların veya talimatların, insan tarafından veya otomatik yolla iletişim, yorumlama ve işleme amacına uygun bir biçimde ifadesidir. Genellikle, biz veri veya veri birimleri üzerindeki işlemlerimizi varlık hakkında her hangi bilgi almak için gerçekleştiririz. Veri kaydedilebilir bilinen gerçeklerdir. Örneğin bir kişinin ismi, adresi, telefon numarası gibi. Veritabanı (Database) Nedir? Veritabanı (Database), en sade tanımıyla birbiriyle ilişkili bilgi topluluğudur. Bilgisayar terminolojisinde veritabanı, bilgisayarda sistematik şekilde saklanmış, programlarca işlenebilecek bilgi topluluğudur. Bu bilgiler; bilgisayar ortamında yönetilebilir, güncellenebilir, taşınabilir aynı zamanda bu bilgiler arasında ilişkiler tanımlanabilir. Literatürde veritabanı, veri bankası olarak da geçmektedir. Veritabanı (Database) önemi Yüksek miktarda veriyle uğraşmak bilgisayar teknolojisinin gelişmeye başladığı ilk yıllardan günümüze kadar süren, sürekli artan ve değişik boyutlar kazanan bir ihtiyaçtır. Veritabanı (Database) önemi Bilgisayar ortamında bu verileri düzenli bir biçimde saklamak, bu verilere istenildiği an hızlı bir şekilde ulaşmak, bu veriler arasından istenilen ölçütlere uygun verileri listeleyebilmek, üzerinde hesaplamalar yapabilmek gibi gereksinimleri karşılayabilmek için veritabanları geliştirilmiştir. Veritabanı (Database) önemi Verileri yönetmek ilk zamanlar yalnızca tek bir kişi için yapılırken, günümüzde artık bu tarz uygulamalar çoklu kullanılıcılar için yapılmaktadır. Veritabanı (Database) kullanımı Günümüzde geliştirilen pek çok yazılımda veritabanının önemli bir yeri vardır. Gerek işletim sistemi tabanlı paket programlarda olsun gerek web-tabanlı uygulamalarda olsun veritabanına sıkça başvurulur. Veritabanı (Database) kullanımı Örneğin, bir muhasebe programında verileri düzenli bir şekilde saklamak önemlidir. Bir emlak firması, web sitesinde kullanıcılarının istediği ölçütlere uygun olan konutları bulabilmesi için verilerini bir veritabanında saklar. Bankacılık işlemlerinde de veri tabanının önemini görmek mümkündür. Bir banka müşterilerinin kişisel bilgilerini, hesap bilgilerini, bu hesaplarla ilgili hareket bilgilerini veritabanı yardımıyla saklar ve yönetir. Veritabanı (Database) kullanımı Veritabanı için aşağıdaki örnekleri verebiliriz. Telefon rehberleri Adres defterleri Öğrenci bilgileri ve notları Finans yazılımları Satış ve pazarlama yazılımları Soru bankası yazılımları Hasta takip sistemleri Eczaneler için ilaç bilgilerinin tutulması Bir Veritabanında Bulunması Gereken Özellikler Saklamak istediğiniz veriler, bir adres defterindeki gibi basit bir yapıda olabilir ya da bankacılık işlemlerindeki gibi karmaşık bir yapıya sahip olabilir. Adres defterlerinde yüzlerle ifade edilebilecek kişilerin (Bu bir veri tabanı için hacmi küçük olan bir bilgidir.) tutulması yeterli olabilecekken bankacılık işlemlerinde milyonlarca kişinin bilgileri tutulmak istenebilir. Bir Veritabanında Bulunması Gereken Özellikler Bazı veriler için güvenlik çok önemli değilken, özellikle bankacılık işlemlerinde saklanan bilginin güvenliği oldukça önemli olabilir. İster basit ister karmaşık yapıda olsun, ister az veri ister çok veri olsun, ister güvenlik ihtiyacı alt seviyede ister üst seviyede olsun günümüz veritabanlarının bulundurması gereken bazı özellikler vardır. Bir Veritabanında Bulunması Gereken Özellikler Bunları şu şekilde sıralayabiliriz: Veritabanı veri saklama gereksinimini tam olarak karşılayabilmelidir. Veritabanındaki bilgiler güvenli bir şekilde tutulmalıdır. Veriler kolayca çağırılabilmelidir. Verilere ulaşabilmek için olabilecek en az çaba harcanmalı ve en kısa zamanda bu verilere ulaşılabilmelidir. Veritabanı içindeki verilerin güncellenebilmesi ve ekleme yapılabilmesi için veriler yönetilebilir olmalıdır. Veritabanı Yönetim Sistemleri Veritabanı yönetim sistemleri veritabanlarını oluşturmak, değiştirmek, veri işlemek ve veri çıkarmak için dizayn edilmiş yazılımlardır. Bir veri tabanı yönetim sistemi sayesinde birden fazla veritabanı kontrol edilebilir ve farklı yazılımların sistemle iletişimi sağlanabilir. En Popüler Veritabanı Yönetim Sistemleri Hangileri? Yaygın Kullanılan Veritabanı Yönetim Sistemleri - Microsoft Access - MySQL - IBM DB2 - Informix - Progress - Microsoft SQL Server - PostgreSQL - Oracle VTYS Karşılaştırma Access Microsoft Office ürünüdür. Küçük ölçekli uygulamalar içindir. Tablo başına 2 GB’ a kadar veri depolayabilir. Aynı anda 255 bağlantıya izin verebilir. Windows işletim sistemleri dışında kullanılamaz. VTYS Karşılaştırma MySQL Açık kaynak kodludur. Windows/Unix/Linux,… işletim sistemlerinde çalışır. (platform bağımsız) Tablo başına 4 TB veri depolayabilir. Web uygulamalarında PHP ile çok sık kullanılır. VTYS Karşılaştırma IBM DB2 IBM tarafından geliştirilmiştir. Windows/Unix/Linux,… işletim sistemlerinde çalışır. “Transaction logging” , “trigger” ve “stored procedure” özelliklerine sahiptir. VTYS Karşılaştırma Informix Illustra firması tarafından geliştirildi. 2001 yılında IBM Informix’ i satın aldı. Ücretli ve güçlü bir veritabanı. Orta ölçekli işletmelerin yükünü kaldırabilecek kapasitedir. VTYS Karşılaştırma SQL Server Microsoft firmasına ait veritabanı sunucu yazılımıdır. Orta ve büyük ölçekli işlemler için kullanılır. Kullanım kolaylığı, güvenilirliği, işlem gücü… Tablo başına 4 TB veri depolama. “Transaction logging” , “trigger” ve “stored procedure” özelliklerine sahip. VTYS Karşılaştırma SQL Server (Dezavantajlar) Sadece Windows üzerinde çalışır. (platform bağımlı) Yüksek maliyet SQL Server Enterprise Edition Lisans Fiyatı VTYS Karşılaştırma PostgreSQL UNIX, Linux ve Windows platformlarının hepsinde çalışır. Ücretsiz, açık kaynak kodlu. Çok güçlü işlem yapısı. Tablo başına 64 TB veri depolama. “Transaction”, “trigger” ve “stored procedure” özelliklerine sahip. VTYS Karşılaştırma Oracle Oracle firması tarafından geliştirildi. Dünyanın en güçlü ve en güvenilir veritabanı olarak gösterilir. Birçok işletim sistemi üzerinde kullanılabilir. Çok yüksek ölçekli uygulamalar için tercih edilir. Oluşturulabilecek tablo sayısı sınırsızdır. Dezavantajı çok yüksek maliyet Veritabanı Yönetim Sistemlerinin Farkları Neler? Her ürünün kapasite, performans ve ölçeklenebilirlik seviyeleri kullanılan yazılımın donanıma hükmetme derecesine göre değişiklik göstermektedir. Oracle veritabanı yönetim sistemi bir çok metriğe göre dünya genelinde en iyi olarak kabul edilmesine karşın, kullandığı işlemci başına talep ettiği lisans ücretleriyle de bir çok firmanın bütçesini aşmaktadır. Veritabanı Yönetim Sistemlerinin Farkları Neler? Microsoft SQL Server, Oracle DB ile bir çok metrikte yarışabilmekte ve daha uygun lisans fiyatlarıyla piyasaya sunulmaktadır. MySQL veritabanı da yine bu ürünlerle yarışabilen ve ücretsiz olarak piyasaya sunulan bir veritabanı yönetim sistemidir. Veritabanı Yönetim Sistemlerinin Özellikleri Günümüz veri tabanı yönetim sistemlerinin özelliklerini şu şekilde sıralayabiliriz: Sorgulama: Sorgulama, bilgilerin çeşitli faktör ve şartların kombinasyonuna göre istenmesi işlemidir. Örneğin; “Sınıftan kaç kişi matematik dersinden 90 ya da üzeri not aldı” sorusuna yanıt arayan bir kişi veritabanı sorgulama dili yardımıyla buna cevap bulabilir ve bir raporlaştırma aracıyla bunun çıktısını elde edebilir. Veritabanı Yönetim Sistemlerinin Özellikleri Yedekleme ve Çoğaltma: Veritabanın saklı olduğu disk bozulabilir ya da başka sorunlardan dolayı veritabanı zarar görebilir. Veritabanı yönetim sistemleri bu veritabanının yedeklerini periyodik olarak alacak ve bunların kopyalarını diğer veritabanı sunucu bilgisayarına aktaracak yardımcı araçlar sunarlar. Veritabanı Yönetim Sistemlerinin Özellikleri Kural Uygulama: Bazen verilere kısıtlama getirilmek istenebilir. Örneğin; bir öğrenci işleri veri tabanında, bir dersten alınabilecek notlar 0 ile 100 arasında olmalıdır. Eğer bunun dışında bir not girilmek istenirse veritabanı yönetim sisteminden bunu engellemesini ve hata mesajı göstermesini isteyebiliriz. Veritabanı yönetim sistemleri bu şekilde kuraların eklenmesini ve kaldırılmasını desteklemektedir. Veritabanı Yönetim Sistemlerinin Özellikleri Hesaplama: Belirli bir şarta uygun verilerin sayısını bulma, verilerin toplamını, ortalamasını alma, verileri belirli bir ölçüte göre sıralama, gruplama gibi işlemler günümüz veritabanı yönetim sistemleri tarafından desteklenmektedir. Veritabanı Yönetim Sistemlerinin Özellikleri Güvenlik: Kimlerin verilere ulaşabileceği, kimlerin veriler üzerinde değişiklik yapabileceği veritabanı yönetim sistemleri tarafından belirlenebilecek özelikler arasındadır. Veritabanı Yönetim Sistemlerinin Özellikleri Günlük Tutma (Logging): “Verilere kimler ulaştı?”, “Hangi bilgiler değiştirildi?”, “Ne zaman değiştirildi?” gibi kayıtlara veri tabanın yönetim sisteminin günlük tutma özelliği sayesinde ulaşılabilir. Veri Modeli Verileri mantıksal düzeyde düzenlemek için kullanılan yapılar, kavramlar ve işlemler topluluğuna veri modeli (data model) denir. Her VTYS belirli bir veri modelini kullanır. Bir VTYS'yi kullanarak oluşturulacak her veri tabanında yer alacak veriler ve veriler arası ilişkiler, mantıksal düzeyde ilgili veri modeline göre düzenlenir; bu veri modeli kullanılarak veri tabanının kavramsal ve dış şemaları oluşturulur. Veri Modelleri Bugüne kadar geliştirilmiş olan çok sayıda veri modeli vardır. Ancak geçmişte ve günümüzde yaygın kullanılan veri modellerini 4 grupta toplamak mümkündür: Sıradüzensel Veri Modeli (Hierarchical Data Model) Ağ Veri Modeli (Network Data Model) İlişkisel Veri Modeli (Relational Data Model) Nesneye-Yönelik Veri Modeli (Object-Oriented Data Model) Yukarıdaki sıralama aynı zamanda kronolojik bir sıralamadır. Hiyerarşik Veri Modeli Bu modelde veriler ağaç yapısına benzer bir biçimde modellenir. En üste kök ve kökün dalları bulunur. Ayrıca her dalın alt dalı sayesinde dallanma ve çeşitlilik artar. Bu modelde her bir alt dalın sadece bir tane noktadan bağlanma şartı bu modelin en büyük kısıtlamalarından biridir. Hiyerarşik veri modeli 1960 ve 1970 yılları arasında popüler olan bir modeldir. Hiyerarşik yapının en tepesindeki düğüm noktasına kök denir ve bu düğümün sadece bağımlı düğümleri bulunur. Bu veri yapısını gösteren grafiğe de hiyerarşik tanım ağacı denir. Hiyerarşik Tanım Ağacı Ağ Veri Modeli Hiyerarşik veri tabanlarının yetersiz kalmasından dolayı bilim adamlarının ortak çalışması sonucu ortaya konulmuş bir veri tabanı türüdür Ağ veri tabanları verileri ağaçların daha da gelişmiş hali olan graflar (ağacın kendisi de özel bir graftır.) şeklinde saklarlar. Bu yapı en karışık yapılardan biridir. 1970’lerden sonra kullanılmıştır. Her kaydın birçok ebeveyn ve birçok çocuk kaydı bulunabilir. Ağ Veri Modeli İlişkisel Model 1980’lerde başlayıp şu anda kullanılan veri tabanlarının çoğu ilişkisel veri modeline daha çok destek verirler. Bu modelde alakalı veriler tablolar içinde saklanır. Ayrıca tablolar arasında değişik türde ilişki kurulur. İlişkiler kurulurken birincil anahtar (Primary key) ve yabancı anahtarlar (Foreign Key) kullanılır. Anahtar alanlar sayesinde indeksleme (indexing) yapma olanağı sunan ilişkisel veri tabanlarında erişim ve işlemler daha hızlı yapılabilir. İlişkisel Model Book ID 1 2 3 4 5 Book ID Title pubid Introductio The history New stuff ab Another title And yet more Subid 1 2 3 4 4 2 4 3 2 1 Author id 1 2 3 4 5 pubid 1 2 3 4 Authorid 2 1 3 2 3 1 2 3 4 5 Author name Smith Wynar Jones Duncan Applegate Subid pubname Harper Addison Oxford Que Subject 1 cataloging 2 history 3 stuff Nesneye-Yönelik Model 1990’lar Veriler nesne olarak modellenir ve yaratılır. Nesneye-Yönelik Programlama (OOP) da olan sınıf ve miras kavramlarına sahiptir. Karmaşık veriler üzerinde işlem yaparken yüksek performans sunan bir yaklaşımdır. Veritabanı Tasarımı Herhangi bir projenin en önemli kısımlarından birisi veritabanı bölümüdür. Projenin tasarım aşamasında veritabanı tasarımı çok iyi yapılmalıdır. Daha sonra yapılacak değişiklikler sorunlar çıkartabilir veya çok zahmetli olabilir. Veri tabanı tasarımında en çok tercih edilen model VARLIK-İLİŞKİ adı verilen modeldir. Varlık-İlişki Modeli (E-R Modeli) Varlık-ilişki modeli, ya da kısaca E-R modeli (EntityRelationship model) 1976 yılında P.P. Chen tarafından geliştirilen bir modeldir. Bugüne kadar varlık-ilişki modeline dayalı hiçbir VTYS geliştirilmemiştir. Buna karşılık varlık-ilişki modeli, VTYS'den bağımsız veri çözümlemede ve semantik veri modellemede en çok kullanılan modeldir. Varlık-İlişki Modeli Bu model kullanılarak sırasıyla; VTYS'den Veri bağımsız olarak veriler çözümlenir, modellemesi yapılır, Veriler ve veriler arası ilişkilerin anlamları ve özellikleri incelenerek E-R çizelgeleri oluşturulur; Kullanılacak Hazırlanan VTYS belirlenir, E-R çizelgeleri bu sistemin veri modeline dönüştürülerek veri tabanı şemaları oluşturulur. Varlık-İlişki Sembolleri Varlık ve Nitelik Varlık : Modelin en temel üyesidir. Var olan ve benzerlerinden ayırt edilebilen her şey varlıktır. Örneğin; kitap, öğrenci, araba birer varlıktır. Modelin içerisinde varlık kümesi dikdörtgen ile gösterilir. Veritabanı olarak düşünülürse her bir tablo bir varlık kümesidir. Nitelik : Varlıkların her bir özelliği bir nitelik olarak ifade edilir. Örneğin, öğrenci adı ve numarası öğrenci varlığının nitelikleridir. Modelin içerisinde nitelikler oval ile gösterilir ve içerisine niteliğin ismi yazılır. Veritabanı olarak düşünülürse tablonun her bir sütunu bir niteliği gösterir. Etki Alanı (Değer Alanı) Her niteliğin bir etki alanı (domain) vardır. Etki alanı ilgili niteliğin olabilecek değerlerinin tümünü içeren bir kümedir. Adı ve Soyadı Burak Özkan Begüm Özkan Dilay Dondurmacı Nitelik Etki Alanı Türetilen Nitelik Bir nitelik kullanılarak bir başka varlık niteliği elde edilebiliyorsa, bu yeni niteliğe türetilen nitelik adı verilir. Örneğin, “personel” varlığının “doğum tarihi” niteliğinden yararlanılarak “yaş” niteliği elde edilebilir. Bu örnekte “yaş” niteliği türetilen niteliktir, tasarımda ayrıca tanımlanmasına gerek yoktur. Birleşik Nitelik Birden fazla nitelik birleştirilerek yeni bir nitelik oluşturulabilir. Bu tür niteliklere birleşik nitelik adı verilir. Örneğin, “mahalle”, “cadde”, “sokak”, “apartman”, “posta kodu” ve “şehir” gibi nitelikler birleştirilerek “adres” isimli yeni bir nitelik oluşturulabilir. Anahtar Nitelik Bir niteliğin değeri her bir varlık için farklıysa bu nitelik anahtar nitelik olarak belirlenir. Anahtar nitelik şema içerisinde niteliğin altı çizilerek gösterilir. Örneğin; öğrenci no gibi. (Yandaki tabloda id sütunu) İlişki Varlıklar arasındaki bağıntıya ilişki adı verilir. İkili ilişki: bir öğrenci ile bir ders bir firma ile bir malzeme Üçlü ilişki: Bir işçi, bir ürün ve bir makine (işçi bu ürünü üretirken bu makineyi kullandığı için) Model içerisinde ilişkiler baklava dilimi ile gösterilir ve içerisine ilişkinin adı yazılır. İlişki İlişki Tipleri A ve B varlık kümeleri arasında tanımlanan (A ve B varlık kümeleri aynı da olabilir), A'dan B'ye bir ilişki kümesi, eşleme sınırlamaları açısından aşağıdaki dört türden birinde olabilir. Birden-bire (one-to-one) Birden-çoğa (one-to-many) Çoktan-bire (many-to-one) Çoktan-çoğa (many-to-many) Tablolar arasında kullanılan ilişkiler 1-1, 1-n, n-1, n-m ile gösterilir. İlişki Tipleri (1-1) ilişki örneği Örnek: “Evlilik” ilişkisi T.C. Medeni Kanunu’na göre birden-bire’dir. Kadın Ayşe Fatma Buket Selin Sezin Evlilik Erkek Ali Ahmet Mustafa Cemal Veli İlişki Tipleri Bire Çok İlişki En çok kullanılan ilişki şeklidir. Bu ilişkide A tablosundaki bir kayıt B tablosundaki birden çok eşleşen kayda sahiptir. Fakat, bunun tersi doğru değildir. Örneğin, müşteri-sipariş tabloları arasındaki ilişki İlişki Tipleri Çoka-Çok ilişki (n-m) Bu ilişkide A tablosundaki bir satırın B tablosunda çok sayıda eşi vardır ve tam tersi de geçerlidir. Bu tür ilişkileri, birincil anahtarları A ve B tablolarının yabancı anahtarlarından oluşan bağlantı tablosu diye adlandırılan üçüncü bir tablo tanımlayarak oluşturabilirsiniz. İlişki Kümesi : Örnek Aşağıda şekilde “öğrenci” ve “ders” varlık kümeleri ile bu iki varlık kümesi arasındaki “aldığı” ilişki kümesi görülmektedir. İlişki Kümesi Örnekleri Erkek Bölüm Öğrenci 1 1 n Evlilik Okuyan Aldığı 1 Kadın n Öğrenci m Ders