Veritabanı Tasarımı Kısıtlamaları Yönetme Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme Kısıtlamaları Ekleme Örneği Örnekte ‘D_EVENTS’ tablosuna bu ikincil anahtarı ekleme sözdizimi verilmektedir: 11 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme Kısıtlamaları Kaldırma Bir kısıtlamayı kaldırırken bundan etkilenen tablolardan herhangi bir veri ya da satır silinmez. 15 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme Kısıtlamaları Görüntüleme Tablonuzdaki tüm kısıtlamaları görmek için, USER_CONSTRAINTS tablosu sorgulanır. 25 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur. Kısıtlamaları Yönetme 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 | Copyright © 2011, Oracle. Bütün hakları mahfuzdur.