24 Mayıs 2014 Cumartesi

Key Ve Constraintler, Constraint Tipleri, Cascade , Alter Table , Drop , Nocheck.

Key Constraintler
1-Entity Constraint
2-Domain Constraint
3-Referential İntegrity  Constraint(R.I.C)
4-Primary Key/ Entity Cons.
5-Foreign Key/R.I.C
6-Unique Constraint/Entity Cons.
7-Check Constraint
8-Default Constraint
9-Rule/Domain Cons.
10-Default Nesnesi/Domain Cons.


Constraint Tipleri;

Domain Constraint:Sütunlara verilen kısaltmalardır.
 Entity Constraint:Tek tek satırlarla ilgilenir. Her satıra farklı bir değer girilmesi gerekir.(Primary Key- Unique gibi)
-Referential İntegrity  Constraint(R.I.C):Bir sütundaki değerlerin aynı tablodaki veya farklı tablodaki veriler ile eşleştiği zaman oluşur.
Unique Constraint: Entity Constraint’tir.Her satıra tek tek bakar.Değer sadece 1 kez girilir. TC kimlik numarası gibi. Primary Key’den tek farkı boş (null) ile geçilebilir olması.


Tablo Oluştururken Unique Oluşturma
create table tablo_adı(
<alan_adı> int not null primary key,
<alan_adı> <veri tipi> not null Unique)

Tabloya Sonradan Unique Oluşturma
alter table <tablo_adı>
add constraint <alan_adı>
unique <(alan_adı)>

o   Unique Constraint ile ilgili bir örnek:
create table nakliyeciler( nakno int, adi varchar(20),
Soyadi varchar(20),sehir varchar(20),bolge varchar(20),
postakodu varchar(20), telefon varchar(20) unique )

insert into nakliyeciler values(1,'ayse', 'yılmaz', 'istanbul','marmara','23456','1234')
insert into nakliyeciler (nakno) values(3)
select * from nakliyeciler

delete nakliyeciler where nakno=1

alter table nakliyeciler
add constraint uksoyadi
unique(soyadi)
--Nakliyeciler tablosuna uksoyadi adlı bir constraint ekliyoruz. Unique (soyadi) ile de soyadi alanını unique contsraint yapıyoruz.




insert into nakliyeciler (soyadi,telefon) values('yılmazz','1234')
insert into nakliyeciler (soyadi,telefon) values('yılmazzz','12345')
select * from nakliyeciler

Union:
Aynı veri tiplerinin alt alta gelmesine dikkat edilmesi gerekir.
All: Kullanılan yerlerde istenilen tüm veriler gösterilir.
Distinct: Kullanılan yerlerde tekrar edilen veriler gösterilmez.

Kullanımı:
select <alan_adı>, <alan_adı> from <tablo_adı>
union
select <alan_adı>, <alan_adı> from <tablo_adı>
select <alan_adı> from tablo_adı>
union all
select <alan_adı> from <tablo_adı>
select distinct <alan_adı> from <tablo_adı>
select distinct <alan_adı> from <tablo_adı>

Primary Key:Girilen değerler ve metinlerde aynısı var mı diye bakar, aynısı var ise değer girişine izin vermez.Entity Constraint’ten satır satır bakar.Tablonun temel alanıdır.Daha çok indexlerde kullanılır.
Tablo Oluşturulurken Primary Key Ekleme
create table tablo_adı(
<alan_adı> <veri tipi> identity not null primary key,<alan_adı> <veri tipi>, <alan_adı> <veri tipi>, <alan_adı><veri tipi>, <alan_adı> <veri tipi>)

Sonradan Primary Key Ekleme
alter table <tablo adı>
add constraint <tablo_adı>
primary key<(alan adı)>

-Foreign Key :R.I.C’dir.Referans alarak işini yapar.

Var Olan Tabloya Sonradan Foreign Key Eklemek
alter table <tablo_adı>
add constraint <alan_adı>
foreign key (<alan_adı>) references <tablo_adı>(<alan_adı>)

Default Nesnesi:Kullanıcı tabloya kayıt girer ve bazılarını boş geçerse  daha önceden belirttiğimiz default nesnesi onun boş geçtiği yere geçer.Default nesnesi de mesela şehir alanına özel “İstanbul” olabilir, böylelikle kullanıcı şehir alanına boş kayıt girse bile daha sonra tabloda “İstanbul” olarak gözükecektir.Global değişken gibi.


Default İptal Etme
exec sp_unbindefault '<tablo_adı>.<alan_adı>'

Default Constraint:Domaindir.Sadece 1 tablodaki şehir sütununu değiştirebilirsin.Yerel değişken gibi.
o   Default  Constraint ile ilgili bir örnek:
create table sehir(
sehirno int, sehiradı varchar(20) default ('istanbul'))


insert into sehir(sehirno) values(2)
insert into sehir values (2,'adana')

select * from sehir

alter table maliyet
add constraint dftarih
default getdate() for tarih
 --Burada dftarih adında constraint oluşturuyoruz. Getdate() ile tarih için  şuanki tarihi alıyoruz.

Exec sp_helpconstraint özelliği:Bu şart constraintin özelliklerini gösterir.

Drop özelliği: Dizinler, tablolar ve veritabanlarını silmeyi sağlar.

Kullanımı:
drop rule <değer>  kuralı tamamen siler, kaldırır.

drop default <değer>  defaultu tamamen siler, kaldırır.

Örnek: drop table siparisler


Alter: Daha önce yaratılmış nesnenin değiştirilmesini sağlar. Örneğin bir tablonun tasarımını değiştirmek gibi.

o   Bir başka örnek;


create default cins
as 'kalem'
exec sp_helpconstraint
exec sp_bindefault 'cins','maliyet.cinsi'

select * from maliyet

--Burada kalem adında default nesnesi oluşturuyoruz. exec sp_helpconstraint i le constraint özelliklerini görüyoruz. exec sp_bindefault 'cins','maliyet.cinsi' ile de cins nesnesini maliyet tablosunun cins alanına bağlıyoruz.


insert into maliyet (urunno) values(8)

exec sp_unbindefault 'maliyet.cinsi'

drop default cins
--Burada maliyet tablosunun cinsi alanında kurulan bağı kaldırıyoruz.


Rule Nesnesi:Domaindir.Kural oluşturur,kayıtlardan kurala bakarak sonuç çıkarır.
Kullanımı:
create rule <değişken_adı>
as @<değişken_adı><karşılaştırma operatörü><değer>


o   Rule Nesnesi  ile ilgili bir örnek:

create rule ucret
as @ucret>1000
--burada ücret adında kural oluşturup aşağıdada koşulunu belirtiyoruz. Bu koşulla girilen kayıtlardaki giriş 1000den büyük olmalıdır.
 Rule nesnesinin bağı bağlama ve bağlamama özelliği vardır;

Tabloya Önceden Oluşturulan Rule U Atama

Kullanımı: exec sp_bindrule <'değer'>, '<tablo_adı>.<alan_adı>'

Örnek: sp_bindrule 'ucret','personeldetaylar.pmaas'
select * from personeldetaylar
--Burada ucret kuralını personeldetaylar tablosundaki maas alanına bağlıyoruz.

insert into personeldetaylar values (5,60,1)

Rule’u Kaldırma

sp_unbindrule 'personeldetaylar.pmaas'
--Burada kurulan bağı kaldırıyoruz.Ama kaldırırken bağlanan alanı yazıyoruz.




insert into personeldetaylar values(8,1700,'aa',1)
select * from personeldetaylar

drop rule ucret
--Drop rule özelliği de yapılan kuralı kaldırır.

Check Constraint:Verilen kontrole uyan kayıtları alır,uymayanları kabul etmez.

Tablo Oluştururken Check Constraint Ekleme
create table <tablo_adı>(
<alan_adı> <veritipi>,
<alan_adı> <veritipi>,
<alan_adı> <veritipi>,
CHECK <(alan_adı)>)



Tabloya Sonradan Check Constraint Ekleme
alter table <tablo_adı>
add constraint <alan_adı>
CHECK <(alan_adı)>

With Nocheck özelliği: Tabloya sonradan constraint eklerken önceki eklenen kayıtlar uymuyorsa etmesini sağlar

Kullanımı:
alter table <tablo_adı>
with nocheck
add constraint <alan_adı>
check <(alan_adı)>

Nocheck: Nocheck yerine sadece check yazarsak adı kontrol görevini uygular.

Kullanımı:
alter table <tablo_adı>
nocheck 
constraint <alan_adı>


o   Check Constraint ile ilgili bir örnek:

create table maliyet( urunno int, cinsi varchar(20), birimfiyati money check(birimfiyati>5))
--Buradaki check koşulu birimfiyatının 5 ten büyük olması kuralını sağlıyor.



insert into maliyet values(1,'kalem',6)
select * from maliyet


alter table maliyet
add constraint chcinsi
check(cinsi like'_____')
--Maliyet tablosuna chcinsi adlı bir constraint ekliyoruz. Check koşuluyla da cinsi alanının 5 karakterli ‘_____’ olması için gereken koşulu yazıyoruz.


insert into maliyet values(3,'defte',7)
select * from maliyet


alter table nakliyeciler with nocheck
add constraint cptelefon
check (telefon like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
--Buradaki with nocheck belirtilen check koşuluna uymamayı belirtiyor.


insert into nakliyeciler(soyadi,telefon) values ('yılmaz','12345678909')


alter table maliyet
nocheck
constraint chcinsi
-Burada da daha önce belirtilen koşulu yoksayıyoruz. Ve bunun sayesinde aşağıdaki gibi 6 karakterli kayıt girebiliyoruz;

insert into maliyet values(6,'cetvel',9)
select * from maliyet

Cascade:Silme ve güncelleme işlemlerini otomatik olarak yapar.
-On delete cascade:Siler
-On update cascade:Günceller.


Kullanımı : create table <tablo_adı>(
<alan_adı> <veri tipi>,
<alan_adı> <veri tipi>,
<alan_adı> <veri tipi>,
constraint <alan_adı> primary key<(alan_adı)>,
constraint <alan_adı> foreign key<(alan_adı)>
references <tablo_adı><(alan_adı)>
on update cascade,
on delete cascade)



Eğer  silme kısmının otomatik ama güncelleme kısmının otomatik olmamasını istiyorsak;
On delete cascade
On update no active

2sinin de olmamasını istiyorsak yanına “no active” yazarız.

Hiç yorum yok:

Yorum Gönder