Veritabanı Tasarımı
Konular ALTER komutunun kısıtlamalar üstünde gerçekleştirebileceği dört farklı fonksiyonu listeleme ALTER TABLE komutlarını kısıtlamalarda ekleme, kaldırma, etkisizleştirme ve etkinleştirme için yazma Kısıtlamalarda kaldırma, etkisizleştirme ve etkinleştirme ya da CASCADE sözdizimi için bir DBA gerektiren bir iş kuralı yazma USER_CONSTRAINTS için veri sözlüğünü sorgulama ve dönen bilgiyi yorumlama 2
Amaç Okulun veritabanına gerçek bir öğrenci alınmadan yeni öğrenci kimlik numarası girilmişse herhangi bir fark yapar mı? Bir kredi kartı şirketi, aynı kredi kartı numarasını birden fazla hesap İçin tanımlasa ya da bir şirket, var olmayan bir bölüm için bir çalışanı işe alsa. Şayet şirket kendi veritabanındaki bilgilerin güvenilirliğine güvenemezse ne olur? 3
Amaç Bir veritabanı sisteminin iş kurallarını uygulayabilmesi gerekir ve aynı zamanda, veri eklemeyi, değiştirmeyi veya silmeyi önlemelidir. Bu durum veritabanı veri bütünlüğünün korunması ihlaline neden olabilir. Bu bölümde, tablo kısıtlamalarında bilgi tutarlılığı için nasıl değişiklik yapılacağını öğreneceksiniz. Böylece buna bağlı olarak, Veritabanı güvenilirliği verinin değişmesi gerektiğinde korunacaktır. 4
ALTER TABLE komutu var olan tablolardaki kısıtlamaları değiştirmek için kullanılır. Bu değişiklikler ekleme ya da kaldırma kısıtlamalarını içerebilir, kısıtlamaları etkinleştirebilir ya da etkisizleştirebilir ve bir sütuna NOT NULL kısıtlaması ekleyebilir. 5
Kısıtlamalarda değişiklik yapmak için kurallar şunlardır: Bir kısıtlama ekleyebilir, etkisizleştirebilir veya etkinleştirebilirsiniz fakat yapısını değiştiremezsiniz. ALTER TABLE komutunda MODIFY deyimi kullanarak var olan bir sütuna bir NOT NULL kısıtlaması ekleyebilirsiniz. NOT NULL sütun düzeyinde değişiklik yapması nedeniyle MODIFY kullanılır. Sadece tablo boşsa veya sütun her satır için bir değer içeriyorsa bir NOT NULL kısıtlaması tanımlayabilirsiniz. 6
ALTER Komutu ALTER komutu şunları gerektirir: Tablo adı Kısıtlama adı Kısıtlama türü Kısıtlamadan etkilenecek sütun adı 7
ALTER Komutu Aşağıda gösterilen örnekte, DJs on Demand veritabanı kullanılarak birincil anahtar kısıtlaması D_CLIENTS tablosu orijinal olarak oluşturulduktan sonra eklenmektedir. Bu durumda, birincil anahtar kısıtlaması D_CLIENTS tablosuna eklenmektedir. 8
Kısıtlamaları Ekleme Var olan bir tabloya bir kısıtlama eklemek için aşağıdaki SQL sözdizimi kullanılır: Şayet kısıtlama ikincil anahtar kısıtlaması ise REFERENCES anahtar kelimesi komut içinde yer almalıdır: 9
Kısıtlamaları Ekleme Örneği DJs on Demand veritabanını ele alın. D_CLIENTS tablosundan birincil anahtar girildiğinde D_EVENTS tablosunda ikincil anahtar olur. 10
Kısıtlamaları Ekleme Örneği Örnekte D_EVENTS tablosuna bu ikincil anahtarı ekleme sözdizimi verilmektedir: 11
Kısıtlamaları Ekleme Koşulları Eğer kısıtlama NOT NULL kısıtlaması ise ALTER TABLE komutu ADD yerine MODIFY kullanır. NOT NULL kısıtlamaları sadece tablo boş iken ya da sütun her bir satır için değere sahip iken eklenir. 12
Kısıtlamaları Etkinleştirme ve Devre Dışı Bırakma Bütünlük kısıtlamaları tarafından tanımlanan kuralları uygulamak için, kısıtlamalar her zaman etkin olmalıdır. Bazı durumlarda ise, performans nedenlerinden ötürü tablo bütünlüğü kısıtlamalarının geçici olarak devre dışı bırakılması arzu edilir. Bir tabloya büyük miktarlarda veri yüklerken Bir tabloda büyük değişiklikler yapan toplu işlemler yaparken (örneğin herkesin çalışan numarasını mevcut numaraya 1000 ekleyerek değiştirme) 13
Kısıtlamaları Kaldırma Bir kısıtlamayı kaldırmak için kısıtlamanın adını bilmek zorundasınız. Bunu bilmezseniz, kısıtlama adını veri sözlüğündeki USER_CONSTRAINTS ve USER_CONS_COLUMNS tablolarından bulamazsınız. DROP deyiminin CASCADE seçeneği bağlı olan herhangi kısıtlamalarında kaldırılmasına neden olur. Bağlılık kısıtlamasını kaldırdığınız zaman Oracle sunucu tarafından zorlanmaz ve veri sözlüğünden kaldırılır. 14
Kısıtlamaları Kaldırma Bir kısıtlamayı kaldırırken bundan etkilenen tablolardan herhangi bir veri ya da satır silinmez. 15
Kısıtlamaları Devre Dışı Bırakma Varsayılan olarak, bir bütünlük kısıtlaması CREATE ya da ALTER TABLE komutunda tanımlanır. Kısıtlama özel olarak DISABLE deyimi belirtilerek devre dışı değilse Oracle tarafından otomatik olarak etkindir. Kısıtlamayı kaldırmadan ALTER TABLE DISABLE seçeneğini kullanarak devre dışı bırakabilirsiniz ya da tekrar oluşturabilirsiniz. DISABLE kısıtlamayı sağlamaya bakmadan gelen veriye izin verir. Bu fonksiyon verinin çocuk tabloya ana tabloda ilgili değer olmasa da eklenmesine izin verir. DISABLE basitçe kısıtlamayı kapatır. 16
DISABLE Deyimini Kullanma DISABLE deyimi hem ALTER TABLE komutunda hem de CREATE TABLE komutunda kullanılabilir. Benzersiz ya da birincil anahtar kısıtlamasını devre dışı bırakma benzersiz indeksleri kaldırır. 17
CASCADE Deyimini Kullanma CASCADE deyimi bağımlı bütünlük kısıtlamalarını devre dışı bırakır. Kısıtlama daha sonra etkinleştirilirse bağımlı kısıtlamalar otomatik olarak etkinleşmez. 18
Kısıtlamaları Etkinleştirme Devre dışı olan bir bütünlük kısıtlamasını etkinleştirmek için ALTER TABLE komutunda ENABLE deyimi kullanılır. ENABLE gelen tüm verinin kısıtlamaya uygun olmasını sağlar. ENABLE deyimini hem CREATE TABLE komutunda hem de ALTER TABLE komutunda kullanabilirsiniz. 19
Kısıtlamaları Etkinleştirme Hususları Bir kısıtlamayı etkinleştirirseniz bu kısıtlama tablodaki tüm verilere uygulanır. Tablodaki tüm veriler kısıtlamaya uymalıdır. UNIQUE KEY ya da PRIMARY KEY kısıtlaması etkinleştirilirse UNIQUE KEY ya da PRIMARY KEY indeksleri otomatik olarak oluşturulur. CASCADE seçeneği ile devre dışı bırakılmış bir PRIMARY KEY kısıtlaması etkinleştirilirse birincil anahtara bağlı ikincil anahtarı etkinleştirmez. ENABLE kısıtlamayı kapattıktan sonra tekrar etkinleştirir. 20
Cascading Kısıtlamaları Cascading veri bütünlüğü kısıtlamaları, kullanıcı ikincil anahtarlar durumundaki bir anahtarı silmeye ya da güncellemeye çalıştığı zaman veritabanı sunucusunda tanımlamanıza imkan sağlar. CASCADE CONSTRAINTS deyimi DROP COLUMN deyimi ile birlikte kullanılır. Tüm veri bütünlük kısıtlamaları kaldırılır. Ayrıca tüm çoklu kısıtlama sütunları da kaldırılır. 21
Cascading Kısıtlamaları Şayet bir ALTER TABLE komutu CASCADE CONSTRAINTS seçeneği içermezse birincil anahtarı ya da çoklu sütun kısıtlamasını kaldırma başarısız olur. Hatırlayın, başka bir tabloda çocuk değer varsa ana tabloyu silemezsiniz. 22
CASCADE Ne Zaman Gerekli Değildir Kaldırılmış sütunlarda tanımlanmış kısıtlamalar ile gösterilen sütunlarda kaldırılır. Daha sonra CASCADE CONSTRAINTS gerekli değildir. Örneğin diğer tablolardaki kısıtlamalar PK sütununu belirtmezse aşağıdaki ifadeyi CASCADE CONSTRAINTS deyimi olmadan gönderebilirsiniz: Bununla birlikte, şayet kısıtlamalar diğer tablolardaki sütunlar tarafından belirtilirse hata almamak için CASCADE CONSTRAINTS deyimi belirtilmelidir. 23
Kısıtlamaları Görüntüleme Tablo oluşturulduktan sonra DECRIBE komutu kullanarak varlığını onaylayabilirsiniz. DESCRIBE kullanarak doğrulayacağınız tek kısıtlama NOT NULL kısıtlamasıdır. NOT NULL kısıtlaması veri sözlüğünde bir CHECK kısıtlaması olarak da görülecektir. 24
Kısıtlamaları Görüntüleme Tablonuzdaki tüm kısıtlam aları görmek için, USER_CONSTRAINTS tablosu sorgulanır. 25
Kısıtlamaları Görüntüleme Veri sözlüğünde listelenen kısıtlama türleri: CHECK için C, PRIMARY KEY için P, REFERENTIAL INTEGRITY için R, UNIQUE için U. 26
Veri Sözlüğünde Kısıtlamaları Görüntüleme Adımları Veri sözlüğünü Oracle Application Express kullanarak görüntüleyebilirsiniz. Aşağıda veri sözlüğünde kullanılan adımlar verilmektedir: 1. Application Express te Utilities seçin. 2. Object Reports seçin. 3. All Object Reports altında Data Dictionary seçin. 4. Arama kutusuna USER_CONSTRAINTS girin ve devam edin. 5. USER_CONSTRAINTS linkine tıklayın. 6. Sözlükten döndürmek istediğiniz bilgileri seçin. 7. Query butonuna tıklayın. 27