Veritabanı Tasarımı Ve Yönetimi - PDF
Download "Veritabanı Tasarımı Ve Yönetimi"
1 SAKARYA ÜNIVERSITESI Veritabanı Tasarımı Ve Yönetimi Hafta 3 Prof. Dr. Ümit KOCABIÇAK Bu ders içeriğinin basım, yayım ve satış hakları Sakarya Üniversitesi ne aittir. "Uzaktan Öğretim" tekniğine uygun olarak hazırlanan bu ders içeriğinin bütün hakları saklıdır. İlgili kuruluştan izin almadan ders içeriğinin tümü ya da bölümleri mekanik, elektronik, fotokopi, manyetik kayıt veya başka şekillerde çoğaltılamaz, basılamaz ve dağıtılamaz. Her hakkı saklıdır 2008 Sakarya Üniversitesi
2 Veri Modeli Yaklaşımları Büyük organizasyonlarda verinin yönetimini sağlamak için veri tabanı sistemlerindee çok sayıda model geliştirildi. En çok kullanılan veri tabanı yönetim modelleri yaklaşımları, hiyerarşik, ağ, ilişkisel ve nesneye dayalı modellerdir. Hiyerarşik ve ağ veri tabanı yönetim modelleri önceden oluşturulmuş sistemler olduğu için günümüzde kullanım oranları azalmıştır. Günümüzde en fazla kullanılan model ilişkisel veri tabanı modelidir. İlişkisel veri tabanı modellerinin eksiklerini kapatmak için nesneye dayalı modeller geliştirilmiştir.
3 Hiyerarşik Veri Tabanları IBM tarafından geliştirilen veri tabanı yönetim sistemidir. Bu sistemde veri tabanı, hiyerarşik olarak temsil edilmiştir. Hiyerarşik veri tabanları verilerinin hiyerarşik olarak oluşturulduğuu yerlerde kullanılabilirler. Ancak veri tekrarı ve veri kaybı gibi dezavantajları mevcuttur. Bu veri tabanı tipi, ana bilgisayar ortamlarındaa çalışan yazılımlar tarafından kullanılmaktadır. Bu türde en çok kullanılan yazılım, IBM tarafından çıkarılan IMS'dir. Uzun bir geçmişe e sahip olmasına rağmen, PC ortamına uyarlanann hiyerarşik veri tabanları yoktur. Hiyerarşik veri tabanları, bilgileri bir ağaç (tree) yapısında saklar. Kök (root) olarak bir kayıt ve bu köke bağlı dal (branch) kayıtlar bu tip veritabanının yapısını oluşturur. Veri tabanındaki kayıtlar ise birbirlerine sahiplik (ebeveyn çocuk veya efendi köle) bağlantısı ile organize edilmişlerdir. Veri tabanının yapısını daha iyi anlamak için aşağıdaki şematik görüntüyüü incelemeliyiz.
4 Ağ Veri Tabanları Hiyerarşik veri tabanlarının yetersiz kalmasından dolayı 1960 yılında toplanan CODASYL adlı bilimsel konferanstaki bilim adamlarının ortak çalışması sonucu ortaya konulmuş bir veri tabanı türüdür. Ağ veri tabanları, verileri ağaç yapılarının daha gelişmiş şekli olan graflar (ağaç yapısının kendisi de özel bir graftır) şeklinde saklarlar. Bu yapı en karışık yapılardan biridir. Sahiplik ilkesi, hiyerarşik modelde olduğu gibi tek yönlü değildir. Veri tabanında veri tekrarını önlemektedir. Fakat bu durumda karmaşık bir veri tabanı yapısının ortaya çıkmasına yol açmıştır. Bu veri tabanı sistemini daha iyi anlamak için aşağıdaki şekli inceleyelim.
5 İlişkisel Veri Tabanları E. F. Codd tarafından geliştirilmiştir. Bu sistemde veriler tablo şeklinde saklanır. Bu veri tabanı yönetim sisteminde veri alış verişi için özel işlemler kullanılır. Bu işlemlerde tablolar operand (işlemci) olarak kullanılır. Tablolar arasında ilişkiler belirtilir. Bu ilişkiler matematiksel bağıntılarla (ilişkilerle) temsil edilir. Bu sistemde veri iki boyutlu bir tabloda saklanır. İki boyut satır ve sütunu gösterir. İlişkisel veri tabanı, diğer veri tabanlarından farklı olarak bağlantılar yerine tablolar arasında ilişki kurarak çalışır. İlişkisel veri tabanını geliştirmek diğer veri tabanlarına göre daha kolaydır. Veri yapısı daha basit ve programlamak için açıktır. En fazla kullanılan veri tabanı sistemi olmasına rağmen bazı aksaklıkları mevcuttur. Bu sistemi daha iyi anlamak için aşağıdaki tabloya bakabiliriz. sid name login age gpa Jones Smith Smith
6 Nesneye Dayalı Veritabanı Günümüzde nesne kavramı her yerde kullanılmaya başlandı. Pek çok kelime işlemci ve hesap tablosu programlarının alıştığımız görünümlerine artık bir de nesneler eklendi. Ancak, bu gerçek anlamda bir nesneye yönelik yazılım demek değildir. Yüzde yüz nesneye yönelik bir yazılımın tamamen nesne temelli çalışması gerekir. Yazılımın mutlaka nesneye yönelik bir dilde yazılmış olması beklenir. Fakat Windows gibi işletim sistemi üzerinde çalışan yazılımlar bu özelliklere tümüyle sahip değillerdir. Sadece nesne kavramını kullanarak bazı ek özellikler sunar. Nesneye yönelik veri tabanı da, C++ gibi nesneye dayalı bir dille (OOPL) yazılmış olan ve yine C++ gibi nesneye dayalı (OOPL) bir dille kullanılan veri tabanı anlamına geliyor. Günümüz teknolojisinde yüzde yüz nesneye yönelik bir veri tabanı yaygın olarak kullanıma sunulmuş değildir. Veri tabanlarında veri pasif durumdadır. Nesneye dayalı veri tabanında ise veriler sınıflar halinde toplanmıştır. Sınıflar ise nesnelerin bir topluluğudur ve aynı sınıftaki diğer nesneler gibi davranırlar. Sınıfların özellikleri ve davranışları veri tabanı nesne isminin tanımında bulunmaktadır. Bu tür veri tabanlarında obje ve nesneler kullanılarak, veri tabanı nesnelerinin yapısı ve davranışları depolanabilir ve planlanabilir. İlişkisel veri tabanları ile karşılaştırıldığında nesneye yönelik veri tabanlarının sahip olması gereken üstünlükler şunlardır : Nesneler, bir tabloda yer alan bir kayıttan çok daha karmaşık yapıya sahiplerdir ve daha esnek bir yapıda çok daha kullanışlı olarak düzenlenebilmektedirler. Nesneye dayalı veri tabanında, yapısı gereği arama işlemleri çok hızlı yapılabilir. Özellikle büyük tablolarla uğraşırken ilişkisel veri tabanlarındann çok daha hızlı sonuca ulaşırlar. Ancak çalışma mantığı tümüyle değişir. Tüm bu özellikler tamamen nesneye yönelik olan veri tabanları için geçerlidir. Bazı ilişkisel veri tabanları ile çalışan yazılımlarda da nesnenin bazı özellikleri kullanılır, ama nesneye yönelik veri tabanı bunu kendini ilişkisel veri tabanı kurallarına uydurarak gerçekleştirebilir.
7 Niçin İlişkisel Model? Çok yaygın kullanılan model. DB2, Informix, Microsoft, Oracle, Sybase, vs Son rakip: nesneye dayalı model ObjectStore, Versant, Ontos Ortaya çıkan birleşim: nesne ilişki modeli Informix Universal Server, UniSQL, O2, Oracle, DB2
8 İlişkisel Veritabanı İlişkisel veri tabanı modeli ilk defa 1970 yılında Dr. E.F. Codd tarafındann ortaya atılmıştır. Model, veri tabanına kayıt edilmiş bilgilerin belli kurallara uymasını kapsar. İlişkisel veri modeli İlişkisel veri tabanı dillerini ortaya çıkarmıştır. İki önemli özelliği vardır; Tablo : Veriler satır ve sütünlardan oluşan tablo halinde tutulur. Şema : İlişki adı ve ilişkii niteliklerinin adlarından oluşur. ÖRNEK ogrenci(ogrno: string, ad: string, login: string, yas: integer, ort: real).
9 İlişkisel Veritabanı Tablolar Bir İlişkisel veri tabanında bilgiler tablolar halinde saklanır. Bir veri tabanında birden fazla tablo bulunabilir. Veri tabanının alt yapısı tablolardan oluşur. Tablo belli bir amaç ve belli bir konudaki verileri içeren bir taşıyıcıdır. Mesela; öğrenci bilgileri, müşteri bilgileri, stok bilgileri, sipariş bilgileri, vb. gibi. Bir ilişkisel veri tabanı tasarımında en önemli kısım tabloların tasarımıdır. Tabloları tasarlarken onlara verdiğimiz özellikler ve yaptığımız sınıflandırma veri tabanı performansı ve ilerde alınacak olan raporlar ve sorguları da etkiler. Verilere erişimi de doğrudan etkiler. Bunun için tabloların tasarımı sırasında tablolarda kullanılacak olan alanların birbiriyle alakalı olmasınaa dikkat etmemiz gerekir. Bir tablonun tasarımı yapılırken veri tekrarı olmayacak şekilde tasarlanmasına dikkat edilmelidir. Bu veri tekrarı, verilerin saklanmasının etkinliğini azalttığı gibi veri hatalarına da yol açar. Bir tablo içersinde bütün bilgileri toplamaya gerek yoktur. Mümkünse veriler birbirleriyle olan ilgilerine göre küçük küçük tablolara bölünür. Mesela; öğrenci, ders ve bolum bilgilerini bir tabloda tutup gereksiz veri girişimi arttırmaktansa bu verileri ayrı ayrı tablolarda tutarak hem veri tekrarından kurtulmuş oluruz hem de daha tutarlı bir yapıya ulaşmış oluruz. Müşteri Kodu Adı Telefon Adres A74 Seren İstanbul A47 Melina Gaziantep
10 İlişki Anahtarları Süper Anahtar (Birincil Anahtarlar (PRIMARY KEY)) Birincil anahtar, tablodaki kaydı tek başına temsil eden bir veridir. Eğer bir alan belli bir alana göre sıralanacaksa, çift girişler önlenmek isteniyorsa ve verilere daha çabuk ulaşmak için birincil anahtar oluşturulur. Diğer tabloların alanlarıyla ilişkilendirmeler yapmak içinde birincil anahtarlar kullanılır. Bir tabloda sadece bir tane anahtar olmayabilir. Fakat birincil anahtar bir tanedir. Birincil anahtar birden fazlaa alanın birleştirilmesinde oluşturulmuş olabilir. Bu şekilde oluşturulmuş anahtarlara "Birleştirilmiş Anahtar" denir. Bu yöntem geneldee bir tabloda kayıtları tek başına temsil eden bir alan bulunmadığı zaman kullanılır. Anahtar alanda yer alan veri, tablonun o alanı içinde tek olması gerekmektedir. İlişkisel veri tabanlarının en önemli özelliklerinden biri tekrarlanan kayıtların bulunmamasıdır. Aynı kaydın tabloya tekrar girişini önlemek için birincil anahtarlar kullanılır. Anahtar alan içinde veri tekrar etmiyor fakat istisnai durumlar varsa bu durumda en iyi çözüm esas anahtar yerine geçecek olan bir birleşik anahtar oluşturmaktır. Bir tabloda bazı alanları boş bırakabiliriz, fakat birincil anahtarı boş olarak geçemeyiz, çünkü böyle yaparak birincil anahtarın tek olma kuralını bozmuş oluruz.
11 İlişki Anahtarları Aday Anahtar Bir tabloda birincil anahtar sadece bir tanedir. Aday anahtar sayısı ise birden fazla olabilir. Aday anahtar bir alanın istenen kaydına dahaa çabuk erişmek ve kaydı sıralı bir şekilde görmek için kullanılır. Birincil anahtara göre yapılan tüm işlemler aday anahtar için de geçerlidir. Fakat aday anahtarlarda veri tekrarı olabilir. Aday anahtar kullanmak sıralamayı kolaylaştırırken veri girişini bir miktar yavaşlatır. Çok sık kullanılan alanlar için aday anahtar oluşturmak her zaman yararlıdır. Fakat fazla sayıda aday anahtar oluşturarak veri tabanını yavaşlatmanın da bir anlamı yoktur.
12 İlişki Anahtarları Yabancı Anahtar (FOREIGN KEY) Bir tabloda olan bir anahtar alan başka bir tabloda da yer alıyorsa, yani tablodaki bir anahtar alan başka bir tablodaki anahtar alanı gösteriyorsa buna "yabancı anahtar" denir. Yabancı anahtar genelde diğer tablolarla ilişki kurmak için kullanılır. Bir yabancı anahtarın, diğer tablolardaki birincil anahtarlarla aynı özelliklere sahip olması gerekmektedir. Farklı iki tablodaki iki ayrı alanın aynı adı ve aynı özellikleri taşıması yabancı anahtar olacak anlamına gelmez. Bir tablodaki birincil anahtarda meydana gelen bir değişiklik onunla eşleşmiş olan yabancı anahtarların da değişmesine neden olur. Bu sayede veri tutarlığı sağlanmış olur.
13 İlişkiler Bire Bir İlişki Bu tür ilişkilerde iki tabloda da eşit sayıda kayıt vardır ve bir tablodaki bir kayda karşı diğer tabloda da sadece bir kayıt karşılık gelir. Aslında bu tür ilişkiler, tablolar arası ilişkilerden daha çok bir tablo diğer tablonun devamı gibidir. Bire bir ilişkiler çok kullanılan ilişki türü değildir. Güvenlik dışında bir neden yoksa bu iki tabloyu birleştirmek mümkündür. Böyle ilişkide bir tablo diğerinin içindeymiş gibi kullanılır Müşteri Kodu A001 A002 B001 Adı Ümit Ayberk Beyza Telefonu Adresi Sakarya Malatya Ankara Müşteri Kodu Kredi A A B Bakiye Banka 2300 Garanti 1200 Akbank 4500 İş Bankası
14 İlişkiler Bire Çok İlişki Bire çok ilişkiler, ilişkisel veri tabanında en çok kullanılan ilişki çeşididir. Bu ilişkide temelde bire bir ilişkiye benzer fakat burada ilişkilendirilen tablolardan birer kayıt olmasına rağmen bir tablonun bir kaydına karşılık diğer tabloda birden fazla karşılıkk gelir. Bire çok ilişkide klasik olarak bir kaydın ona bağlı sahip olduğu alt kayıtları tutarlı biçimde kontrol etmeye karşılık gelen bir yapıdır. Bu tür ilişkide bir tablonun birincil anahtarına karşılık diğer tablodaki eşdeğer yabancı anahtar denk gelir. Müşteri Kodu A001 A002 B001 Adı Ümit Ayberk Beyza Telefonu Adresi Sakarya Malatya Ankara Stok Kodu KT123 MK234 CS657 Müşteri Kodu A001 A002 A001 Miktar Alış Fiyatı Satış Fiyatı
15 İlişkiler Çoka Çok İlişki Bu tür ilişkide birinci tabloda yer alan çok sayıdaa kayda karşılık diğer tabloda da yine çok sayıda karşılık gelir. Her iki tabloda da birden fazla kayda karşılık birden fazla kayıt karşılık gelir. Çoka çok ilişkiler karışık oldukları için fazla kullanılmazlar. Ayrıca veri tabanının bu ilişkileri kontrol etmesi daha zordur. İki tablo arasındaki bu tür ilişkileri ortadan kaldırmak için üçüncü bir tablo kullanmak en iyi yöntemdir. Aşağıdaki örnekte Mob Kod arasında çoka çok ilişkisi vardır. Sipariş No Stok Kodu Açıklama Alış Fiyatı Satış Fiyatı 2008SP001 A001 Çamurluk SP005 A002 Ön Far SP010 A001 Vites Kolu Müşteri Kodu M007 M017 M456 Müşteri Adı Ali Veli Ayşe Stok Kodu Müşteri Adresi Miktar A001 Trabzon 12 A002 Sinop 17 A001 Kars 2
16 SQL Sorgulama Dili 1970 yılında IBM tarafından geliştirilmiştir. Standarttlar : SQL 86 SQL 89 (küçük revizyon) SQL 92 (büyük revizyon) SQL 99 (büyük revizyon, şu anda kullanılan )
17 The SQL Sorgulama Dili 18 yaşındaki öğrencileri bulmak için: SELECT * FROM Students S WHERE S.age=18 sid name login age gpa Jones Smith
18 Çoklu İlişkii Sorgulama SELEC FROM WHER CT S.name, E.cid M Students S, Enrolled E RE S.sid=E.sid AND E.grade= A sid name login age gpa Jones Smith Smith sid cid grade Carnatic101 C Reggae203 B Topology112 A History105 B S.name Smith E.cid Topology112
19 Tablo Oluşturma CREATE TABLO <tablo adı> (<Tablonun alanın adı> <alanın tipi> <alanın kısıtlaması>...) CREATE TABLO komutu kullanılırken tablonun her alanı (sütunu) için veri tipi ve başka bazı parametreleri vardır. Bazı alanlar (sütunlar) için kısıtlamalarının gösterilmesi gereklidir. Bu kısıtlamalar aşağıdaki şekildee sayılabilir; 1. Not Null, alan için bir değerin mutlaka girilmesi gerektiğini gösterir. (Bu parametre daha çok birincil anahtarlar ve eşsiz alanlar için kullanılır. ) 2. Default, alan için bir başlangıç değeri verilmesinde kullanılır. Bu değer sabit bir değer olabileceği gibi, Null değeri de olabilir. 3. İsteğe bağlı olarak constraint anahtar kelimesi kullanılarak bir veya birden fazla kısıt kullanılabilir. Bu kısıtlar şunlardır. a. PRIMARY KEY (Birincil anahtar) b. UNIQUE (her kaydın bir alan için farklı bir değer olması gerektiğini gösterir. c. REFERENCES (başka bir tablonun alanıyla ilişki kurmak için
20 Veri Tipleri Veri Tipi CHAR (n) INTEGER REAL DATE Kullanım n tane karakterden oluşan karakter katarını gösterir. Tamsayıları gösterir. Kesirli sayıları göstermek için kullanılır. Tarih göstermek için kullanılır.
21 SQL İlişkilerii Oluşturma CREATE TABLE Students (sid: CHAR(20), name: CHAR(20), login: CHAR(10), age: INTEGER, gpa: REAL) CREATE TABLE Enrolled (sid: CHAR(20), cid: CHAR(20), grade: CHAR(2))
22 Kayıt ekleme ve silme Tek bir kayıt ekleme: INSERT INTO Students (sid, name, login, age, gpa) VALUES (53688, Smith, 18, 3.2) Belirli şartı sağlayan kayıtları silmek: DELETE FROM Students S WHERE S.name = Smith
23 SQL de Primary ve Aday Anahtarlar CREATE TABLE Enrolled (sid CHAR(20) cid CHAR(20), grade CHAR(2), PRIMARY KEY (sid,cid) ) CREATE TABLE Enrolled (sid CHAR(20) cid CHAR(20), grade CHAR(2), PRIMARY KEY (sid), UNIQUE (cid, grade) )
24 SQL de Foreign Anahtar CREATE TABLE Enrolled (sid CHAR(20), cid CHAR(20), grade CHAR(2), PRIMARY KEY (sid,cid), FOREIGN KEY (sid) REFERENCES Students ) Enrolled sid cid grade Carnatic101 C Reggae203 B Topology112 A History105 B Students sid name login age gpa Jones Smith Smith
25 Varlık İlişki Diyagramlarının İlişki Şemalarına Dönüştürülmesi Varlıkların tabloyaa dönüştürülmesi: sicilno isim maas Personel CREATE TABLE Personel (sicilno CHAR(11), isim CHAR(30), maas INTEGER, PRIMARY KEY (sicilno) )
26 Bağıntıların tabloya dönüştürülmesi: CREATE TABLE Works_In( ssn CHAR(11), did INTEGER, since DATE, PRIMARY KEY (ssn, did), FOREIGN KEY (ssn) REFERENCES Employees, FOREIGN KEY (did) REFERENCES Departments)
27 Zayıf Varlıkların Tabloya Dönüştürülmesi CREATE TABLE Dep_Policy ( pname CHAR(20), age INTEGER, cost REAL, ssn CHAR(11) NOT NULL, PRIMARY KEY (pname, ssn), FOREIGN KEY (ssn) REFERENCES Employees, ON DELETE CASCADE) ssn name lot cost pname age Employees Policy Dependents
28 Genellemelerin Tabloya Dönüştürülmesi name ssn lot 2 yaklaşım vardır : 1) Üst düzey varlık kümesi ve alt düzey varlık kümleri için birer tablo oluşturulur. Alt düzey tablolarında, üst düzeyin anhtarına yer verilir. 2) Üst düzey tablosu olmaz. Fakat alt düzey tablolarında üst düzeyin tüm nitelikleri tekrarlanır. hourly_wages Employees hours_worked ISA contractid Hourly_Emps Contract_Emps
29 Kümelemelerin Tabloya Dönüştürülmesi Bir bağıntı kümesinin (A) ucunda bir varlık kümesi yerine bir kümeleme (B) varsa, (A) tabloya dönüştürülürken varlık kümesi anahtarı yerine kümelemedeki (B) bağıntısının anahtarı kullanılır.