Ancak MSSQL veritabanını kullanan bir kaç büyük şirketin (LOGO, Mikro vs.) veritabanı yapılarını incelediğimde foreign key hiç kullanmadiklarini gordum.. (tabi gözden kaçırmadıysam) Gormemle kendi kafamda bazi soru isaretleri olustu halbuki ben veritabanimi tam teşkilat foreign keyler kullanarak yaptım.. Şuana kadar kullandigim foreign keylerin sayisi 100 ü gecmistir...
Sizce ben de mi bir yalnışlık var yoksa kendi içlerinde 30 - 40 tane yazilimci calistiran bu sirketler mi?
Emin olun siz doğrusunu yapıyorsunuz. Çünkü foreign key kullanmadan da veritabanı tasarlanıp program yazılabilir ve bu kontroller yazdığınız programla yapılabilir. Fakat veritabanına sadece sizin yazdığınız arayüz haricinde de ulaşılacağını düşünmeniz gerekir. Öyle bir durumda veritabanı tutarlılığı (referential integrity) bozulacaktır. Veritabanı kısmında imkânların sonuna kadar kullanmak daha az kod yazmanıza da sebep olacaktır
Ben de onceden bu kontrolleri program tarafinda yapiyordum ve foreign key olayini ogrendigimde yapmakta oldugum programi tekrar yazdim sirf foreign keyler icin yapiyi tekrar kurdum.. Ve onlarin kullanmadigini yeni farkettigim icin acaba bosuna mi yaptim diye endişeye düşmüştüm
Onların kullanmamaktaki maksatları farklı, bir çok kontrol vs. şeyleri kendi programlarında yapıyorlar, eğer DB değiştirmek zorunda kalırlarsa diye DB Seerverların kendi özelliklerini kullanmıyorlar. Bazıları ne trigger ne de stored procedure bile kullanmazlar. Databse server sadece onlar için Indexli bir Veri Havuzundan öte değil. Kısmen haklılar kısmen değiller. Bu tamamen bakış açısına bağlı bir şey.
Ama ben kullan derim, zira FK'lar ve PK'lar bütün DB'lerde aynıdır.
Peki bisey sormak istiyorum yani benim foreign key vs. kullanmamin tek sebebi saglamligi ve de hizi artirmak.. Saglamligin arttigi sanirim kesin ancak performans konusunda da düsündügüm gibi bir avantaj yakaliyor muyum?
Cünkü ben sadece Insert veya Update komutu gonderiyorum onun disinda hic bir kontrol yapmama gerek kalmiyor, eger veritabanindan hata gelirse sadece onlari yakaliyip kullaniciya gosteriyorum.. İşime de geliyor elbet kod karisikligindan kaciyorum.. Dusunduklerim dogru dimi ?