Constraints (Kısıtlayıcılar)
Constarints veritabanında veri bütünlüğünü sağlamak amacıyla oluşturulan
kurallardır. constarints veritabanına hatalı giriş yapılmasını engeller.
NOT NULL : NULL değerlerin girilmesini engeller.
UNIQUE : İlgili sütunda veri tekrarını engeller.
PRIMARY KEY : Bir tabloda ki benzersiz alanı belirtir.Yani hem NOT NULL olacak hem de UNIQUE olacak.
FOREIGN KEY : Tablolar arasında ortak sütunları kullanarak ilişki olmasını sağlar.
Kısıtlar CREATE TABLE veya ALTER TABLE ile oluşturulur.
Kısıtımız sadece bir sütun ile ilgiliyse sütun seviyesin de kısıt oluşturulur.
Eger kısıtımız birden fazla sütun içeriyorsa tablo seviyesin de kısıt oluşturulabilir.
Kısıt oluştururken bir isim verilmesi gerekiyor.Eger isim verilmez ise Oracle otomatik olarak SYS_Cn formatın da bir isim verecktir.(SYS_C001256, SYS_C003546 vs.)
**NOT NULL
Sütun seviyesin de tanımlanan bir kısıttır.Tablo seviyesin de tanımlanamaz. NOT NULL kısıtı sütuna NULL değer girişine izin vermez.
Örnek:
CREATE TABLE deneme_not_null(
id NUMBER,
name VARCHAR2(20),
email VARCHAR2(20) CONSTRAINT test_not_null NOT NULL,
date_of_birth DATE NOT NULL
);
Bir tablo da yer alan sütunlara NOT NULL kısıtı eklemek ya da çıkarmak için ALTER TABLE MODIFY cümlesi kullanılır.
--NOT NULL kısıtını eklemek
ALTER TABLE deneme_not_null MODIFY name NOT NULL;
--NOT NULL kısıtını kaldırmak
ALTER TABLE deneme_not_null MODIFY name NULL;
**UNIQUE
UNIQUE kısıtı tabloda ki bir veya daha fazla sütun ile oluşturulur ve kısıtı oluşturan
sütun ya da sütun grubuna aynı verilerin girilmesini engeller.
UNIQUE kısıtı NULL değer girişine izin verir.
UNIQUE kısıtı tek bir sütun ile oluşturulduğu zaman ilgili sütuna aynı veri sadece bir kez girilebilir.
UNIQUE kısıtı tek bir sütun ile oluşturulabildiği gibi birden fazla sütun içerecek şekilde kompozit bir yapıda da oluşturulabilir.
Bu şekilde en fazla 32 sütun kullanılabilir.Bu durum da ilgili sütun grubu için aynı veri grubu sadece bir kez girilebilir.
Bu şekilde bir kısıtı tablo seviyesinde tanımlanmalıdır.
Aşagıda ki SQL cümlesiyle deneme_unique isimli tablo oluştururuz,oluştururken de email adlı sütuna test_unique isimli
UNIQUE kısıtını ekleriz,date_of_birth sütununa da otomatik olarak isim atayarak UNIQUE kısıtı ekleriz.
CREATE TABLE deneme_unique(
id NUMBER,
name VARCHAR2(20),
email VARCHAR2(20) CONSTRAINT test_unique UNIQUE,
date_of_birth DATE UNIQUE
);
--Aşagıda ki SQL cümlesiyle deneme_unique tablosunda ki id sütununa test_unique2 isimli UNIQUE kısıtını ekleriz.
ALTER TABLE deneme_unique ADD CONSTRAINT test_unique2 UNIQUE (id);
--Aşagıda ki SQL cümlesiyle deneme_unique tablosunda ki test_unique3 adlı UNIQUE kısıtını sileriz.
ALTER TABLE deneme_unique DROP CONSTRAINT test_unique3 ;
**PRIMARY KEY
PRIMARK KEY kısıtı UNIQUE kısıtının ve NOT NULL kısıtının birleşimidir.
Yani hem NULL değer girişine hem de aynı(tekrar) verinin girişine engeller.
--NOT : Bir tabloda sadece bir adet PRIMARY KEY kısıtı olabilir ama bir PRIMARY KEY kısıtının içinde birden fazla sütun olabilir.
--Aşagıda ki SQL sorgusuyla deneme_primary_key adlı tablo oluşturur ve id sütununa test_primary_key adlı Primary Key kısıtı ekleriz.
CREATE TABLE deneme_primary_key(
id NUMBER CONSTRAINT test_primary_key PRIMARY KEY,
name VARCHAR2(20),
email VARCHAR2(20)
);
--Aşagıda ki SQL sorgusuyla deneme_primary_key adlı tablo oluşturur ve id sütununa otomatik bir isim vererek Primary Key kısıtı ekleriz.
CREATE TABLE deneme_primary_key(
id NUMBER PRIMARY KEY,
name VARCHAR2(20),
email VARCHAR2(20)
);
--Aşagıda ki SQL sorgusuyla deneme_primary_key adlı tablo oluşturur ve id ve email sütununa test_primary_key adlı Primary Key kısıtı ekleriz.
CREATE TABLE deneme_primary_key(
id NUMBER,
name VARCHAR2(20),
email VARCHAR2(20),
CONSTRAINT test_primary_key PRIMARY KEY (id,email)
);
--Aşagıda ki SQL sorgusuyla deneme_primary_key adlı tabloya id sütununa test_primary_key adlı Primary Key kısıtı ekleriz.
ALTER TABLE deneme_primary_key
ADD CONSTRAINT test_primary_key PRIMARY KEY(id) ;
--Aşagıda ki SQL cümlesiyle deneme_primary_key tablosunda ki test_primary_key adlı Primary Key kısıtını sileriz.
ALTER TABLE deneme_primary_key DROP CONSTRAINT test_primary_key ;
--Aşagıda ki SQL cümlesiyle deneme_primary_key tablosunda ki Primary Key kısıtını sileriz.
ALTER TABLE deneme_primary_key DROP PRIMARY KEY;
--Aşagıda ki SQL cümlesiyle deneme_primary_key tablosunda ki Primary Key kısıtını sileriz CASCADE kullandıgımız için ilişki olsa dahi siler.
ALTER TABLE deneme_primary_key DROP PRIMARY KEY CASCADE ;
--NOT : Oracle PRIMARY KEY kısıtını oluşturan sütun için index oluşturur
--NOT : UNIQUE ve PRIMARY KEY kısıtları nedeniyle oluşturulan indexler ,normal indexler gibi yönetilebilir ama bu indexler DROP INDEX komutu ile düşürülemez(silinemez).
**FOREIGN KEY
FOREIGN KEY kısıtı ilişkisel bütünlüğü sağlamamızı sağlar.Bu kısıtla bir tabloda ki PRIMARYKEY ya da UNIQUE sütunla diğer tabloda ki ya da aynı tabloda ki diğer bir sütun ile bir ilişki oluşturur.Bu sayede FOREIGN KEY kısıtı olan tabloya NULL harici bir kayıt eklenirken ilgili kaydın ana tabloda yer alması koşulu aranır.
--Aşagıda ki SQL cümlesiyle deneme_foreign_key_alt adlı tablo oluşturur ve patientid adlı sütuna da Primary key kısıtı ekleriz.
CREATE TABLE deneme_foreign_key_alt(
patientid NUMBER PRIMARY KEY,
patientname VARCHAR2(20),
patientemail VARCHAR2(20) UNIQUE,
doctorid NUMBER
);
--Aşagıda ki SQL cümlesiyle deneme_foreign_key_ana adlı tablo oluştururuz.
CREATE TABLE deneme_foreign_key_ana(
doctorid NUMBER PRIMARY KEY,
doctorname VARCHAR2(20),
doctoremail VARCHAR2(20) UNIQUE
);
--Aşagıda ki SQL koduyla da deneme_foreign_key_alt adlı foreign key sütun ekleriz.Referans olarak da deneme_foreign_key_parent tablosundan doctorid sütunu alırız.
ALTER TABLE deneme_foreign_key_alt
ADD CONSTRAINT test_foreign_key FOREIGN KEY (doctorid)
REFERENCES deneme_foreign_key_ana(doctorid);
--Aşagıda ki SQL koduyla foreign key otomatik olarak isim alır ve foreign key kısıtı ekleriz.Referans olarak da deneme_foreign_key_parent tablosundan doctorid sütunu alırız.
ALTER TABLE deneme_foreign_key_alt
ADD FOREIGN KEY (doctorid) REFERENCES deneme_foreign_key_ana(doctorid);
--Aşagıda ki SQL cümlesiyle deneme_foreign_key_alt tablosunda ki TEST_FOREIGN_KEY adlı foreign key kısıtını sileriz.
ALTER TABLE deneme_foreign_key_alt DROP CONSTRAINT TEST_FOREIGN_KEY ;
--NOT : FOREIGN key kısıtı oluştururken ON DELETE cümlesi kullanabiliriz,ON DELETE cümlesi ile ana(parent) tablodan bir kayıt silindiği zaman ne yapılacağını belirleriz.ON DELETE CASCADE kullanırsak ana tablo da bir kayıt silinirse çocuk(child) tablodaki bununla ilgili kayıtlar da otomatikman silinir.ON DELETE SET NULL kullanırsak ana tabloda bir kayıt silinirse çocuk tabloda ki bununla ilgili kayıtlara NULL değer atanır.Eger ON DELETE cümlesi kısıt oluşturulurken kullanılmaz iseOracle çocuk tabloda kayıt varken ana tablodan kayıt silinmesine izin vermez.
--Aşagıda ki SQL koduyla test_foreign_key adlı foreign key kısıtı ekleriz.Daha sonra ana tabloda bir kayıt silindigi zaman da çocuk tabloda ki ilişkili kayıtlar da silinir.
ALTER TABLE deneme_foreign_key_child
ADD CONSTRAINT test_foreign_key FOREIGN KEY (doctorid)
REFERENCES deneme_foreign_key_parent(doctorid) ON DELETE CASCADE;
--Aşagıda ki SQL koduyla test_foreign_key adlı foreign key kısıtı ekleriz.Daha sonra ana tabloda bir kayıt silindigi zaman da çocuk tabloda ki ilişkili kayıtlara NULL eklenilir.
ALTER TABLE deneme_foreign_key_child
ADD CONSTRAINT test_foreign_key FOREIGN KEY (doctorid)
REFERENCES deneme_foreign_key_parent(doctorid) ON DELETE SET NULL;
Hiç yorum yok:
Yorum Gönder