Forum

Cascading Integrity
 
Bildirimler
Hepsini Temizle

Cascading Integrity

9 Yazılar
3 Üyeler
0 Reactions
6,865 Görüntüleme
(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

Merhaba arkadaşlar constraint lerle ilgili kafama takılan sorular var

mesala tablomda şöyle bir  constraint tanımlıyorum

add constraint MyFK foreign key (numarasi) references dbo.TabloGenel(numarasi) ON UPDATE CASCADE

aslına bakarsanız bu kodun ne işe yaradığını örnek üzerinde deneyerek çözdüm

ancak

ON UPDATE CASCADE|Set DEFAULT|SET NULL|NO ACTION gibi 4 farklı şekildede kullana bilirim işte öğrenmek istediğim

1) ON UPDATE CASCADE tam olarak nedir?(Türkçesi nedir?)

 2)ON UPDATE  Set DEFAULT  tam olarak nedir?

3)ON UPDATE  SET NULL  tam olarak nedir?

4)ON UPDATE  NO ACTION  tam olarak nedir?

tabi bide bunların başına ON DELETE koyabiliyoruz ozaman 8 farklı dizim oluyor

umarım derdimi anlatabilmişimdir 

 
Gönderildi : 18/01/2011 06:30

(@turgaysahtiyan)
Gönderiler: 344
Reputable Member
 

Foreign key de bildiğin gibi master tabloya detail tablo x bir column üzerinden bağlıdır.


Master tablodaki bağlı olan bu kolonun değişimi veya silinimi durumunda detay tabloda ilgili kolona sahip satırlara ne şekilde davranılmasını bu yukarıda bahsettiğin seçenekler ile bakarız.


Delete üzerine verilebilen 4 seçeneğe bakacak olursak


No action (Default) - Primary key silindiği zaman, bu key'e bağlı olan foreign key'in olduğu tabloda kayıt varsa bu silme işlemi hata verir.


Cascade - Primary key silindiği zaman, bu key'e bağlı olan foreign key'in olduğu tabloda da ilgili kayıtlar silinir.


Set Null- Primary key silindiği zaman, bu key'e bağlı olan foreign key'in olduğu tabloda ilgili kayıtlar silinmez, ilgili Foreign key kolonuna null atılır.


Set Default- Primary key silindiği zaman, bu key'e bağlı olan foreign key'in olduğu tabloda ilgili kayıtlar silinmez, ilgili Foreign key kolonuna default değer atılır.


Update için olanlarda bu mantıkta.


Aşağıdaki makaleyide okuyabilirsin. Detaylı açıklamış.


http://msdn.microsoft.com/en-us/library/ms186973(v=SQL.100).aspx

 
Gönderildi : 18/01/2011 18:01

(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

Hocam Çok açıklayıcı olmuş 

Çok teşekkür ederim... 

 
Gönderildi : 18/01/2011 23:01

(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

Hocam 

Set Default la ilgili bi ornek verebilirmisiniz mesala 2 farklı tabloda 'numaralarim' adli 2 farkli stunda constraint belirliyorum ve on delete Set Default kullanıyorum

Sildiğim zaman default olarak foreign keyin odlugu tabloya 'NULL' atıyor ama ben mesala herhangibir şey yazdırmak istiyorum ne yapmam gerekiyor?

umarım anlaşılır olmuştur biraz şüpheliyim ama 😀

Teşekkürler... 

 
Gönderildi : 19/01/2011 07:38

(@AhmetRende)
Gönderiler: 138
Estimable Member
 

Tabloyu dizayn modunda açın. Ve aşağıdaki column propertiesten default value alanına ne gelmesini istiyorsanız yazın.
Resimde işaretlediğim yer.

Default değer eğer siz bir alana birşey girmeziseniz verilen değerdir.
Set default cascade oalrak ayarladıgınızda eğerki primary key alanı silinirse foreign key alanına burada ayarladıgınız default değer yazılır.

Saygılar.

 

 
Gönderildi : 19/01/2011 10:39

(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

    Ahmet hocam teşekkürler

   Ama foreign key    alanına default olarak  Primarykey alanında buluna bilecek bir şey yazma zorunlulugu var dimi?

   Mesala  foreign key  e sahip tablomda ki 'numarlar' stunu Primarykey tanımlı başka bir tablodan alıyor Primarykey li tablonun 'numaralar' stununda "111","222" var diyelim, e tabi foreign tanımladıgım tablomum 'numaralar' stunudandada "111" ve "222" den farklı giremem ve ben foring key li tabloma default olarak mesala "1234" girmesini istiyorum ancak primary keyli tablodan sildiğimde foring keyli tabloya "1234" girmesi mantık dışı olur çünki primary key li tabloda "1234" yok

   Doğru anlamışmıyım? 

 
Gönderildi : 20/01/2011 01:30

(@AhmetRende)
Gönderiler: 138
Estimable Member
 

Primary satırı zaten silnidği için diğer tabloda verilen değerin pek bir onemi yok.

Mesela şöyle düşünün bir hastane otomasyonu olsun, Ve taburcu olan hastalar primary tablosundan silinsin, referans oldugu tabloda da taburcular için 0000 kodu girilsin.

Çok basit bir örnek tabi bu. DB tasarımı ihtiyaca göre yapılandırılmalı.

Tabi primary key silindikten sonra select yaparken tüm kayıtların listelenmesini isterseniz left join ile baglamalısınız. sadece join yaparsanız örtüşmeyen satırlar gösterilmeyecektir.

Saygılar

 
Gönderildi : 20/01/2011 01:43

(@turgaysahtiyan)
Gönderiler: 344
Reputable Member
 

Ahmet çok güzel açıklamış

 
Gönderildi : 21/01/2011 18:48

(@AhmetRende)
Gönderiler: 138
Estimable Member
 

Ahmet çok güzel açıklamış

Hocam Estağfurullah. Dilimiz döndüğünce.
Çok teşekkürler.

 
Gönderildi : 21/01/2011 19:20

Paylaş: