Veritabanı Tasarımı NOT NULL ve UNIQUE Kısıtlamaları Tanımlama
NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Konular Kısıtlama terimini veri bütünlüğü ile ilişkilendirerek tanımlama Sütun seviyesinde ve tablo seviyesinde kısıtlama tanımlamanın ne zaman mümkün olduğunu belirtme Kısıtlamalara neden anlamlı isimler verilmelidir belirtme Hangi veri bütünlük kuralları NOT NULL ve UNIQUE kısıtlamaları ile zorlanmaktadır belirtme Tablo ve sütun seviyesinde NOT NULL ve UNIQUE kısıtlamaları içeren CREATE TABLE komutları yazma Tablo oluşturulduğu zaman kısıtlamalar nasıl oluşturulur açıklama 2
NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Amaç Toplumun kurallar olmadan nasıl çalışacağı konusunda düşünelim. Kırmızı ışıkta durmak bir kuraldır. Bu kural olmadan sürücü güvenliği olur mu? Veritabanları için ikincil anahtar değeri birinci anahtar değeri ilk olarak girilmeden girilemez. Bu kural zorunlu olmasaydı veritabanına ne olurdu düşünün. 3
NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Amaç Bir veritabanı sadece içindeki veri kadar güvenlidir. Kısıtlamalar tabloya geçersiz kayıtlarını girilmesini önler. Negatif bir maaş değeri ya da aynı numaraya sahip 6 öğrenci ya da birbiriyle ilişkilendirilmeyen tablolar anlamlı mıdır? Kurallar olmadan veritabanı bütünlüğüne güvenilebilir mi? Bu derslerde kuralları zorlamak için kısıtlamaların nasıl oluşturulacağını göreceğiz. Ayrıca onların nasıl yönetileceği ve veri sözlüğündeki tanımlamalarına nasıl bakılacağı öğrenilecek. 4
Genel Anlamda Kısıtlamalar NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Yani, bir kısıt tam olarak nedir? Veritabanıkuralları gibi kısıtlamalar düşünün. Tüm kısıtlama tanımları veri sözlüğünde saklanır. Kısıtlamaları eğer diğer tablolardan bağımlılıklar varsa bir tablonun silinmesini önler. Kısıtlamalar bir tabloda bir satır eklendiğinde, güncellendiğinde ya da silindiğinde verilere kuralları uygular. Kısıtlamalar ve onları isimlendirme önemlidir. Kısıtları birbirinden ayırt edebileceğimiz isimler vermek önemlidir. 5
NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Kısıtlama Oluşturma Tablo oluşturma SQL sözdizimini tekrar çağırın. CREATE TABLE komutunda her sütun ve veri türü tanımlıdır. CREATE TABLE komutu tablodaki her sütun için kısıtlamaları oluşturmak için kullanılır. İki farklı şekilde yer bulur: Sütun seviyesinde isim ve veri türünün yanında Tablo seviyesinde listelenen tüm sütun adlarından sonra 6
Sütun Seviyesinde Kısıtlama NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Sütun seviyesinde bir kısıtlama tek bir sütunla ilişkilidir. Sütun seviyesinde kısıtlama kurmak için kısıtlama CREATE TABLE komutunda sütun tanımı parçası olarak tanımlanmalıdır. Bir sütun düzeyinde kısıtlama kurmak için aşağıdaki SQL deyimini inceleyin. Kısıtlama adı clients_client_num_pk. Bu iş kuralı client_number sütununun istemci tablosunun birincil anahtarı olduğunu uygular. 7
Kısıtlamaları İsimlendirme NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Veritabanındakiher kısıtlama bir isme sahiptir. Kısıtlama oluşturulduktan sonra clients_client_num_pk gibi isim verilmelidir. Verilmezse sistem tarafından SYS_C00585417 gibi bir isim verilir. Bir adlandırma kuralı, kısıtlama kısaltması ardından gelen kısaltılmış tablo ismi ve kısaltılmış sütun adı kombinasyonu olabilir. tablo-adı_sütun-adı_kısıtlama-türü Şayet ayrılmış kelime CONSTRAINT, CREATE TABLE tanımında kullanılırsa kısıtlamaya isim vermek zorunludur. Kısıtlama adı 30 karakter ile sınırlandırılmıştır. 8
Sütun Seviyesinde Kısıtlama NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Kısıtlamayı kendinizin isimlendirmesi en iyisidir. Çünkü sistem tarafından oluşturulan isimlerin tanınması kolay değildir. Tablo tanımına bakalım: 9
NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Sütun Seviyesinde Kısıtlamaları İsimlendirme İsimlendirme kuralına göre: client_number birincil anahtar kısıtlaması clients_client_no_pk olarak isimlendirilmeli last_name sütunu not null kısıtlaması clients_last_name_nn olarak isimlendirilmeli e-mail_address sütunu için benzersiz kısıtlama clients_email_uk olarak isimlendirilmeli 10
Kısıtlama İsimlendirme Örneği NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Bu örnekte hem kullanıcı isimlendireli hem de sistem isimlendirmeli bir kısıtlama örneği gösterilmektedir: İki kısıtlama oluşturuldu: clients_client_num_pk isimli kullanıcı isimlendirmeli kısıtlama SYS_Cn isimli sistem isimlendirmeli kısıtlama 11
Tablo Seviyesinde Kısıtlama NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Tablo seviyesinde kısıtlama CREATE TABLE komutunda sütun tanımlamalarından ayrı olarak listelenmektedir. Tablo seviyesinde kısıtlama tanımlamaları tüm tablo sütunları tanımlandıktan sonra listelenir. Örnekte benzersiz kısıtlama CREATE TABLE komutunda sonda listelenmektedir. 12
Kısıtlamalar için Basit Kurallar NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Birden fazla sütunu belirten kısıtlamalar tablo seviyesinde tanımlanmalıdır. NOT NULL kısıtlaması sadece sütun seviyesinde tanımlanır UNIQUE, PRIMARY KEY, FOREIGN KEY ve CHECK kısıtlamaları sütun ya da tablo seviyesinde tanımlanabilir. CREATE TABLE komutunda CONSTRAINT kelimesi kullanılırsa kısıtlama ismi verilmelidir. 13
NOT NULL ve UNIQUE Kısıtlamaları Tanımlama İhlalleri İnceleme Birden fazla sütunu belirten kısıtlamalar tablo seviyesinde tanımlanmalıdır. NOT NULL kısıtlaması sadece sütun seviyesinde tanımlanır UNIQUE, PRIMARY KEY, FOREIGN KEY ve CHECK kısıtlamaları sütun ya da tablo seviyesinde tanımlanabilir. CREATE TABLE komutunda CONSTRAINT kelimesi kullanılırsa kısıtlama ismi verilmelidir. 14
NOT NULL ve UNIQUE Kısıtlamaları Tanımlama İhlalleri İnceleme 15
NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Kısıtlama Türleri Oracle veritabanında 5 tür kısıtlama vardır. Her tür farklı bir kural uygular. Türler: NOT NULL kısıtlamaları UNIQUE kısıtlamaları PRIMARY KEY kısıtlamaları FOREIGN KEY kısıtlamaları CHECK kısıtlamaları 16
NOT NULL Kısıtlaması NOT NULL ve UNIQUE Kısıtlamaları Tanımlama NOT NULL kısıtlaması ile tanımlanan bir sütun tabloya girilen her satır için bu sütunda bir değer olmasını gerektirir. Örneğin, çalışan tablosundaki e-mail sütunu NOT NULL olarak tanımlanmışsa, tabloya girilen her çalışan e-mail sütununda değere sahip olmalıdır. NOT NULL sütunlarını tanımlarken kısıtlama adında son ek _nn kullanılabilir. Örneğin, e-mail için çalışan tablosunda bu kısıtlamanın adı emp_email_nn olabilir. 17
NOT NULL ve UNIQUE Kısıtlamaları Tanımlama UNIQUE Kısıtlaması UNIQUE kısıtlaması bir sütundaki ya da sütunlar kümesindeki her değer benzersiz olmalıdır. Tablonun iki satırı aynı değer içeremez. Örneğin, iş sektöründe iki insan aynı mail adresine sahip olamaz. Bu sütun UNIQUE kısıtlaması kullanılarak tanımlanabilir. UNIQUE olarak tanımlanan sütun ya da sütun kümesi benzersiz anahtar olarak adlandırılır. 18
NOT NULL ve UNIQUE Kısıtlamaları Tanımlama UNIQUE Kısıtlaması Eğer her giriş için iki veya daha fazla sütunun birleşimi benzersiz ise kısıtlama için birleşik benzersiz anahtar denir. E-posta ve soyadının tüm kombinasyonlarının EŞSİZ olması birleşik bir anahtara örnektir. anahtar kelimesi sütunu temsil eder kısıt adı değildir. 19
NOT NULL ve UNIQUE Kısıtlamaları Tanımlama UNIQUE Kısıtlaması Şayet tablodaki emailsütunu UNIQUE kısıtlama ile tanımlanırsa, diğer sistemcilerin girişlerinde aynı email olamaz. İki istemcil aynı evde yaşıyorsa ve bir e-posta adresini paylaşıyorsa ne olur? 20
UNIQUE Kısıtlamalar Tanımlama NOT NULL ve UNIQUE Kısıtlamaları Tanımlama UNIQUE kısıtlama tanımlanırken kısıtlama adının son ekinde uk kullanılabilir. Örneğin, çalışan tablosundaki email sütunu için benzersiz kısıtlama adı emp_email_uk olur. Birleşik benzersiz anahtar tanımlamak için kısıtlamayı sütun seviyesinde değil tablo seviyesinde tanımlamak gerekir. Birleşik benzersiz anahtar kısıtlama adına örnek: 21
Birleşik Benzersiz Anahtar UNIQUE kısıtlamaları sütun NOT NULL kısıtlamasına sahip değilse giriş null olabilir. Bir sütundaki null her zaman benzersiz kısıtlamayı sağlar çünkü null ifadesi herhangi bir değere eşit değildir. NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Bu sütunların birleşimi BENZERSİZ olmalı. 22
Birleşik Benzersiz Anahtar Bir birleşik benzersiz anahtar olan kısıtlamayı sağlamak için tablodaki herhangi iki satır anahtar sütunlarında aynı değer kombinasyonuna sahip olamaz. NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Ayrıca tüm anahtar sütunlardaki null içeren herhangi bir satır otomatik olarak kısıtlamayı sağlar. Bu sütunların birleşimi BENZERSİZ olmalı. 23
NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Tablo Oluştururken Kısıtlama Oluşturma NOT NULL kısıtlamasını tablo oluşturma komutu parçası olarak eklerken Oracle veritabanı NOT NULL sütunundaki değeri zorlamak için Kontrol Kısıtlaması oluşturur. Bu kısıtlama oluşturması tablonuzu oluştururken size görülmezdir, Oracle bu işi yapar. Tablo oluşturma komutu sonunda Tablo oluşturuldu mesajı görüntülenir fakat oluşturulan kısıtlamalar hakkında detaylı bilgiler verilmez. 24