Bir kısıtı askıya alıp yeniden etkinleştirmek


SQL Server’da bir tablodaki Check kısıtlarını ve Foreign Key kısıtlarını NOCHECK ifadesini kullanarak askıya almanız mümkün.

Neden bunu yapmaya ihtiyaç duyasınız?

Mesela zaten doğru olduğunu bildiğiniz toplu bir veri aktarımı olacaksa… Ya da doğru olmadığını bildiğiniz birtakım verilerin sonradan temizlenmek üzere bir an önce tabloya dahil edilmesi gerekiyorsa…

Tamam, kısıtı devre dışı bıraktınız ve verileri aldınız. Sonradan işiniz bitti ve kısıtı tekrar etkin hale getirmek istiyorsunuz. Bunu yaparken mevcut satırları check ederek ya da etmeden aktif hale getirme şansınız var. Verileri zaten düzelttiyseniz ve uyuyor olduğunu biliyorsanız belki de kontrol etmeden aktif hale getirmeyi tercih edebilirsiniz. Ama orada durun! Bir sakıncası var!

SQL Server sorgu optimizasyonu sırasında kısıtları kullanabilir. Mesela bir kolonun değerinin 5’le 10 arasında olabileceği gibi bir kısıtınız varsa ve 4’ten küçük diye bir sorgu gelirse, kısıttan dolayı böyle bir satır olamayacağını bilerek hızla cevap dönebilir. Ya da normalde dönebilir. Eğer ilgili kısıtı askıya almış ve sonrada yeniden devreye alırken mevcut satırları kontrol ettirmemişseniz, bu optimizasyonu yapamaz. Çünkü kısıta güvenemez.

Hem sys.check_constraints hem de sys.foreign_keys’te is_not_trusted kolonu bu bilgiyi gösterir.

Kısıtlarla oynamak, sınırlarda dolaşmanın her zaman getirebileceği birtakım risklere sahip gördüğünüz gibi…

Bu yazı SQL Server içinde yayınlandı ve , olarak etiketlendi. Kalıcı bağlantıyı yer imlerinize ekleyin.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s