23 Mayıs 2014 Cuma

Key ve Constraint'ler


KEY VE CONSTRAINT



İleri Seviye Constraintler


1.       Entity Constraintler(Kayıt)
2.       Domain Constraintler(Sütun-alan)
3.       Referential Constraintler(Referans)

Constraint Çeşitleri


1.       Primary Key (Birincil Anahtar)
2.       Foreign Key (Yabancıl anahtar)
3.       Unique Constraint
4.       Check Constraint
5.       Default Constraint
6.       Rule Constraint
7.       Default Nesnesi



İleri Seviye Constraintler


1.      Entity Constraintler : Tek tek satırlarla ilgilenir.  Her satırda farklı bir değer alır. Tüm sütunla ilgilenmez.  Bunun için Primary key ve Unique Constraint kullanılır.


2.      Domain Constraintler : Sütunlara verilen kısaltmalardır. Bunun için Check Constraint, Default Constraint ve Default Nesnesi kullanılır.  Örneğin adı alanına en az 3 karakterlik giriş yapılacak ya da doğum tarihi alanı 2000 ile 2011 yılları arasında olacak gibi.


3.      Referential Constraintler : Bir sütundaki değerin aynı tablo veya farklı tablodaki diğer bir sütundaki veri ile eşleştiği zaman oluşur. Bu constraint için Foreign Key kullanılır.


Constraint Çeşitleri


1.       Primary Key : Girilen değerler ve metinler de aynıları var mı diye bakar ve aynısı girilmez. Entity olduğundan satır satır bakar. Tablonun temel alanıdır. Daha çok indekslemede kullanılır. Unique'den farkı boş geçilemez(NOT NULL).

Tablo oluştururken Primary Key ekleme :


                create table <tabloadi>(                         

                <alanadi> <veritipi> primary key)

 

Alter : Daha önceden oluşturulmuş nesnenin değiştirilmesini, düzenlenmesini sağlar. Tablonun tasarımını, alanlarını değiştirmek gibi.


           Tablo oluşturduktan sonra Primary Key ekleme :


               alter table <tabloadi>

               add constraint <herhangibirisim>
               primary key(<alanadi>)

2.       Unique Constraint : Entity'ye girer. Her bir satıra tek tek bakar. Değer sadece 1 kez girilir. TC kimlik numarası gibi. Primary Key'den farkı boş geçilebilir olması (NULL).

Tablo oluştururken Unique Constraint ekleme :


                create table <tabloadi>(                         

                <alanadi> <veritipi> unique)

           Tablo oluşturduktan sonra Unique Constraint ekleme :


                alter table <tabloadi>

                add constraint <herhangibirisim>

                unique(<alanadi>)

 

3.       Foreign Key : Referential Constraint'dir. Referans alarak işini yapar.

 Tablo oluştururken Foreign Key ekleme :


                create table <tabloadi1>(                         

                <alanadi> <veritipi> foreign key references <tabloadi2(<alanadi>)> )

             Tablo oluşturduktan sonra Foreign Key ekleme :


                alter table <tabloadi1>

                add constraint <herhangibirisim>
                foreign key (<alanadi>)  references <tabloadi2(<alanadi>)>


4.       Default Nesnesi : Bir nesne oluşturulur ve bu nesne istenilen tablolarda varsayılan değer olarak kullanılabilir. Global bir değişken olarak da düşünülebilir.Oluşturulan nesneyi drop ile sileriz. Domain'e girer.

               
                create default <isim>  as  'deger'                     --Default nesnesini oluşturduk.              
                create default cins as 'kalem'               --Oluşturduğumuz nesneyi istediğimiz alanlara bağlamamız lazım.                                             

                exec sp_bindefault 'isim','tabloadi.alanadi'         --İstenilen alana bağlandı.       
        exec sp_bindefault 'cins', 'maliyet.cinsi'         
                 
    exec sp_unbindefault 'tabloadi.alanadi'               --Alanla bağlantısı kesildi.        
  exec sp_unbindefault 'maliyet.cinsi'      


5.       Default Constraint : Sadece bir tablodaki alana uygulanabilir, birden fazla tabloya uygulanamaz. Default Nesnesi'nden farkı budur. Yerel değişken olarak düşünülebilir. Domain'e girer.

Tablo oluştururken Default Constraint ekleme :


                create table <tabloadi>(                         

                <alanadi> <veritipi>  default (<deger>))

                create table sehir(
                sehiradi varchar(20) default ('istanbul'))


          Tablo oluşturduktan sonra Default Constraint ekleme :


                alter table <tabloadi>

                add constraint <herhangibirisim>
                default ....... (<alanadi>) 

                alter table maliyet
                add constraint dftarih
                default getdate() for tarih


6.       Rule Nesnesi : Kural oluşturulur. İstenilen her tablonun sütununda kullanılır. Domain'dir.

                                           

            

               create rule <isim>  as  @isim<operatörler>deger          --Rule nesnesini oluşturduk.                                      create rule ucret as @ucret>1000

                exec sp_bindrule 'isim','tabloadi.alanadi'    --İstenilen alana bağladık.

            exec sp_bindrule 'ucret', 'maliyet.cinsi'     

   

                exec sp_unbindrule 'tabloadi.alanadi'      --Alanla bağlantısı kesildi.

                exec sp_unbindrule 'maliyet.cinsi'         
                
               

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

  Tablo oluştururken Check Constraint ekleme :


                create table <tabloadi>(                   

                <alanadi> <veritipi>  check (alanadi<deger>))

                create table maliyet(
                bf money check(bf>5))

              Tablo oluşturduktan sonra Check Constraint ekleme :

                alter table <tabloadi>

                add constraint <herhangibirisim>
                check  (<alanadi><deger>) 
               
     
                  alter table maliyet
                  add constraint chcinsi
                  check(cinsi like '_____')

 

Cascade : Silme ve güncelleme işlerini otomatik olarak yapar.


on delete cascade : siler.

on update cascade : günceller.


exec sp_helpconstraint <tabloadi> : Constraintlerin yapısını gösterir.

Silme kısmının otomatik ve güncelleme kısmının cascade olmasını istemiyorsak ;

on delete cascade


on update No active

                                                   

          

Hiç yorum yok:

Yorum Gönder