Bölüm 4: DDL Veri Tanımlama Dili -43-
Dr. Serkan DİŞLİTAŞ DDL (Data Definition Language Veri Tanımlama Dili : Bu kategorideki SQL komutları ile veritabanları, tablo, görünüm ve indekslerin yaratılması, silinmesi ve değişikliklerin yapılması gibi işlemler yapılabilmektedir. Örnek : Create, Drop, Alter vb. 4.1. Oluşturma Deyimi ( Create Create deyimi tablo, indeks ve view gibi veritabanı nesnesi oluşturmada kullanılmaktadır. 4.1.1. Tablo Oluşturma ( Create Table Create Table Kimlik ( Numara Char(9, Ad Char(15, Soyad Char(15, Telefon Char(13, Adres Char(50 4.1.2. Kısıtlamalar ( Constraints Kısıtlamalar sayesinde verilerin istenen şartlarda girişleri sağlanmış olmaktadır. Kısıtlama yapılmadan kullanılan alanlar için Default değerler geçerlidir. Tablo yapısında mevcut olan, ancak ekleme durumunda değeri atanmayan alanlar için Default değerler geçerlidir. İki tür kısıtlama mevcuttur. Bunlar : Tablo Kısıtlamaları : Tablonun bir veya daha çok sütunu için yapılan kısıtlamalardır. Bu tür kısıtlamalar tabloya ait bütün sütun tanımlamaları bittikten sonra yapılır. Sütun Kısıtlamaları : Sadece belirtilen sütun için kısıtlama getirilir. Kısıtlama işlemi alan isminin hemen yanında yapılır. Kısıtlamalar Not Null Unique Primary Key Foreign Key İşleyişi Veri girişinde Null değerler engellenir. (Sadece Sütun sınırlaması Girilen verinin tabloda tek olması sağlanır. Birincil Anahtar özelliği verir. Tabloda tek olmasını sağlar. Birden çok alan için Tablo Kısıtlaması kullanılır. Yabancı anahtar özelliği verilir. -44-
Bölüm 4: DDL Veri Tanımlama Dili Aşağıdaki örnekte tablo ve sütun kısıtlamaları gösterilmektedir. Create Table Kimlik ( Numara Char(9 Primary Key, <<< Sütun Kısıtlaması Ad Char(15, Soyad Char(15, Telefon Char(13, Adres Char(50 Unique (Ad,Soyad <<< Tablo Kısıtlaması Örnek 1: Create Table Dersler ( DersKodu Char(7 Primary Key, DersAdi Char(20, Teori SmallInt, Pratik SmallInt, Kredi SmallInt DersKodu alanına sütun kısıtlaması ile Birincil Anahtar özelliği verilmiştir. Örnek 2: Create Table Notlar ( Numara Char(9, DersKodu Char(4, Donem Char(9, Vize Integer Not Null, Final Integer, Ortalama Real Primary Key (Numara, DersKodu, Donem Yukarıda Numara, DersKodu, Donem ve Vize alanlarına veri girişi boş geçilemeyecektir. Numara, Donem ve DersKodu alanlarına da birincil anahtar özelliği verilmiştir. Tabloya fiziksel olarak kayıt girişleri bu alanlar dikkate alınarak yapılacaktır. Gereksiz yere fazla miktarda Primary Key kullanılması performansın düşmesine yol açacaktır. -45-
Dr. Serkan DİŞLİTAŞ Örnek 3: Create Table Notlar ( Numara Char(9, Donem Char(9, DersKodu Char(4, Vize Integer, Final Integer, Ortalama Real Unique (Numara, Donem, DersKodu, Primary Key (Numara, Donem, DersKodu Soru : Yukarıda Unique ve Primary Key kullanımlarından hangisinin olmaması sonucu etkilemez? Açıklama : Yukarıdaki kullanımda Primary ve Unique kullanımı aynı şey değildir. Primary Key (Numara, Donem, DersKodu kullanımında geçerli olan özellikler aşağıda verilmektedir : Numara, Donem ve DersKodu alanlarına göre Birincil Anahtar (Fiziksel indeks kullanımı (Bu alanlara göre sıralı olmayı sağlar Numara, Donem ve DersKodu alanların hepsi aynı olan ikinci bir kayıt yapılmasını engelleme Numara, Donem ve DersKodu alanlarına Null girişi engelleme (Not Null özelliği verme Unique (Numara, Donem, DersKodu kullanımında geçerli olan özellikler aşağıda verilmektedir : Numara, Donem ve DersKodu alanların hepsi aynı olan ikinci bir kayıt yapılmasını engelleme Bu alanlar kombinasyonu için yalnız bir defa olacak şekilde Null giriş yapılabilir Cevap : Bu durumda Unique olmadan da sonuç aynı olur. -46-
Bölüm 4: DDL Veri Tanımlama Dili Örnek 4: Default değer kullanımı. Create Table Kimlik ( Numara Char(9 Primary Key, Ad Char (15, Soyad Char(15, MedeniHal Char (10 Default Bekar Tablodaki alanın varsayılan değerinin belirlenmesinde Defult kullanılır. Burada MedeniHal alanı için varsayılan değer Bekar olarak tanımlanmaktadır. 4.1.3. İndeks Oluşturma ( Create Index İndeksler kullanılarak sorgulama işlevleri hızlandırılabilmektedir. Ancak çok sayıda indeks kullanılması da sorunlar yaratabilmektedir. Bir tablo için maksimum 5 ya da 6 tane indeks tanımlanabilir. Ayrıca Primary Key ve Foreign Key alanlar için İndeks tanımı yapılmamalıdır. Create Index İndeks_Adı on Tablo_Adı (Sütun1 İndeks_Yönü, Sütun2 İndeks_Yönü,... --------------------------------------- ---------------------------------------------- İndeks_Adı Tablo_adı Sütun İndeks_Yönü : Oluşturulan indekse verilecek isim : İndeksin geçerli olduğu tablo ya da görünüm adı : İndeksin tabloda hangi alan ya da alanlara göre yapılacağı belirtilir. : Asc (default artan sıralama, Desc azalan sıralama verir. Örnek 1: Create Index ndx_ogrno on Kimlik (OgrNo Kimlik adlı tabloda OgrNo alanına göre, ndx_ogrno adında indeks oluşturulur. Örnek 2: Create Index ndx_isim on Kimlik ( Ad, Soyad Kimlik adlı tabloda Ad ve Soyad alanlarına göre, ndx_isim adında indeks oluşturulur. Ad aynı ise Soyada göre sıralama yapılır. Örnek 3: Create Index ndx_isim on Kimlik ( Ad Asc, Soyad Desc Kimlik adlı tabloda Ad alanına göre artan, Soyad alanına göre azalan olacak şekilde, ndx_isim adında indeks oluşturulur. Örnek 4: Create Unique Index ndx_ogrno on Notlar (OgrNo Notlar adlı tabloda OgrNo alanına göre, ndx_ogrno adında ve tekrarlı kayıtlara izin verilmeyen indeks oluşturulur. -47-
4.1.4. Görünüm Oluşturma ( View Dr. Serkan DİŞLİTAŞ Mevcut tablo ya da tabloların sadece istenilen sütunlarının veya belirtilen şartlara uyan kayıtlarının görülüp üzerinde işlemlerin yapılmasına izin verilmesi amacıyla kullanılmaktadır. Bu sayede tablolara ait değişik View ler oluşturularak, kullanıcıların belli yetkiler dahilinde verilere erişmeleri sağlanabilmektedir. Bu verilerin güvenliği açısından son derece önemlidir. Ayrıca karmaşık sorgulardan elde edilen görünümlerin kullanılması uygulamada kolaylık sağlamaktadır. View yapıları sadece görüntü amaçlıdır. Kayıtlar veritabanında fiziksel olarak sadece tablolarda tutulmaktadır. Görünümler üzerinde kayıt ekleme, silme ve güncelleme işlemleri aynı tablolarda olduğu gibi yapılabilmektedir. Ancak görünümlerde oluşturulma şartına bağlı olarak ekleme yapılabilmektedir. Create View View_Adı ( View_Sütun1, View_Sütun2 As SQL_Cümlesi --------------------------------------------------------------------------- View_Adı View_Sütun SQL_Cümlesi : Oluşturulacak View için verilecek ad. : Oluşturulan View da sütunların alacağı adlar. : SQL değimlerinden oluşan ifade. Not : View oluşturulurken Order By, Compute By ve Into kullanılamamaktadır. Örnek 1: Create View V_Ogrenci (Ogrenci_No, Ders_Kodu, Ortalama As Select Numara, DersKodu, Ortalama From Ogrenci Numara, DersKodu, Vize, Final ve Ortalama alanlarından oluşan Ogrenci adlı tablodan V_Ogrenci adında sadece Numara, DersKodu ve Ortalama alanlarını içeren bir view oluşturulmuştur. Örnek 2: Create View V_Ogrenci (Numara, Ortalama As Select Numara, Ortalama From Ogrenci Where DersKodu = 4510207 4510207 kodlu derse ait sadece Numara ve Ortalama alan değerlerini içeren bir View oluşturulmuştur. Bu ders kodundan başka derslere ait kayıtlar görülemez. -48-
Bölüm 4: DDL Veri Tanımlama Dili Örnek 3: Create View V_Ortalama (OgrNo, OgrAd, OgrSoyad, DersKodu, Ortalama As Select K.Numara, K.Ad, K.Soyad, N.DersKodu, N.Ortalama From Kimlik as K, Notlar as N Where ( K.Numara = N.Numara And ( N.DersKodu = 4510207 Kimlik ve Notlar adlı iki ayrı tablodan Numara alanına göre eşit bağlantı yapılarak sadece 4510207 kodlu ders için ilgili alanlar alınarak V_Ortalama adında bir View oluşturulmuştur. Örnek 4: Insert Into V_Ortalama (OgrNo, OgrAd, OgrSoyad, DersKodu, Ortalama Values ( 094510006, ZEYNEP, DİŞLİTAŞ, 4510207, 65 V_Ortalama adında bir görünüme kayıt eklenmek istenmektedir. Ancak kayıt çok sayıda tabloyu içerdiğinden aşağıdaki gibi bir mesaj verilerek kayıt engellenmektedir. View or function 'V_Ortalama' is not updatable because the modification affects multiple base tables. NOT: View tek bir tablo ile ilişkili ise; bu durumda Null giriş izinleri de dikkate alınarak Insert Into kullanımlarına izin verilebilir. Örnek 5: Create View v_notlar (Numara, DersKodu, Ogretim_Yili, Harf_Notu as Select okulno, yoptikkod, ogretimyili, harfsonuc From Notlar Where Okulno Like ' 4526%' Örnek 6: Select * From V_Ortalama Yukarıdaki sorguda; V_Ortalama adlı view içerisindeki tüm kayıtlar elde edilir. Aynı normal bir tablo gibi kullanılabilir. Örnek 7: Örnek 8: Select * From v_notlar Where Derskodu like '4526209%' Drop view v_notlar -49-
Dr. Serkan DİŞLİTAŞ 4.2. Silme Deyimi ( Drop Mevcut tablo, index ve view gibi veritabanı nesnelerin silinmesi amacıyla kullanılır. 4.2.1. Tablo Silme ( Drop Table Drop Table Silinecek_Tablo ---------------------------------------------------------- ---------------------- Silinecek_Tablo : Silinmesi istenen tablonun adı Örnek 1: Drop Table Notlar Yukarıdaki kullanımda Notlar adlı tablo veritabanından silinir. Örnek 2: Drop Table Kimlik Yukarıdaki kullanımda Kimlik adlı tablo veritabanından silinir. 4.2.2. İndeks Silme (Drop Index Drop Index Tablo_Adı. Silinecek_Index -------------------------------------------------------------------- Tablo_Adı : Index in bulunduğu tablo adı Silinecek_Index : Silinmesi istenen indeksin adı Örnek 1: Drop Index Kimlik. ndx_numara Yukarıdaki kullanımda Kimlik tablosuna ait ndx_numara adlı indeks veritabanından silinir. Örnek 2: Drop Index Kimlik. ndx_isim Yukarıdaki kullanımda Kimlik tablosuna ait ndx_isim adlı indeks veritabanından silinir. 4.2.3. Görünüm Silme ( Drop View Drop View Silinecek_View ------------------------------------------------------------------- Silinecek_View : Silinmesi istenen View adı. Örnek 1: Drop View V_Ogrenci Yukarıdaki kullanımda V_Ogrenci adlı görünüm silinecektir. -50-
Bölüm 4: DDL Veri Tanımlama Dili 4.3. Değiştirme Deyimi ( Alter Tablo, index ve view gibi veritabanı nesneleri üzerinde değişiklikler yapmak için kullanılmaktadır. 4.3.1. Tablo Değişikliği ( Alter Table Alter Table Tablo_Adı Ekle/Sil/Değiştir Sütun_İsmi [Veri_Tipi Kısıtlama] ----------------------------------------------------------------------------------------- Tablo_Adı : Üzerinde değişikliklerin yapılacağı tablonun adı Ekle/Sil/Değiştir : Drop Column ise belirtilen sütun tablodan silinir, Add ise belirtilen Sütun veri tipi ve kısıtlamalara bağlı olarak tabloya eklenir, Alter Column ise belirtilen alanda değişiklik yapılır. Veri_Tipi : Add ve Alter Column ile birlikte kullanılır. Eklenen Sütun için tip belirlenir. Kısıtlama : Alter Column ile birlikte kullanılır. Eklenen Sütun için kısıtlama belirlenir. Örnek 1: Alter Table Kimlik Add BabaAdi Char(15 Kimlik adlı tabloya 15 karakter boyutunda, BabaAdi adlı yeni bir alan eklenir. Örnek 2: Alter Table Kimlik Add Cinsiyet Char(1 Default E Kimlik adlı tabloya varsayılan değeri E olan Cinsiyet adlı yeni bir alan eklenir. Örnek 3: Alter Table Kimlik Drop Column Cinsiyet Kimlik adlı tablodan Cinsiyet adlı alan silinir. Örnek 4: Alter Table Kimlik Alter Column Ad Char(20 Not Null Kimlik adlı tabloda mevcut Ad alanı tipi 20 karakter olarak değiştirilir ve ayrıca Ad alanı için Null kullanılmasına izin verilmemektedir. Örnek 5: Alter Table Kimlik Alter Column Ad Char(35 Null Kimlik adlı tabloda mevcut Ad alanı tipi 35 karakter olarak değiştirilir ve ayrıca Ad alanı için Null kullanılmasına izin verilmektedir. Ancak aşağıdaki gibi kullanılabilmektedir: Alter Table Kimlik Alter Column Ad Char(35 Not Null Default Not 1: Bu değişikliklerin yapılabilmesi için; tabloda bulunan verilerin uygun olması gereklidir. Örneğin daha önceden ilgili alan için Null değerler girilmişse, Null girişlere izin verme olmayacaktır. Not 2: Burada değiştirilmek istenen alan silinip yeniden oluşturulursa ne olur? Bu durumda önceden var olan alan verilerinin silineceği unutulmamalıdır. -51-
-52- Dr. Serkan DİŞLİTAŞ