Veritabanı Tasarımı

advertisement
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.
Download