Ne SQL ne de ilişkisel model, doğal bir anahtara başvuran yabancı anahtarlar tarafından rahatsız edilmez. Aslında, doğal anahtarlara başvurmak genellikle performansı önemli ölçüde artırır. İhtiyacınız olan bilgilerin doğal bir anahtarda ne sıklıkla yer aldığını görünce şaşıracaksınız; bu anahtarın daha geniş bir tablo için birleşim yaptığı anlamına gelir (ve dolayısıyla bir sayfada depolayabileceğiniz satır sayısını azaltır).
Tanım gereği, ihtiyacınız olan bilgiler her zaman her "arama" tablosunun doğal anahtarında tamamen bulunur. ( Arama tablosu terimi gayrı resmidir. İlişkisel modelde tüm tablolar yalnızca tablolardır. ABD posta kodları tablosunda şuna benzer satırlar olabilir: {AK, Alaska}, {AL, Alabama}, {AZ, Arizona} Çoğu kişi buna bir arama tablosu diyecektir.)
Büyük sistemlerde, birden fazla aday anahtarı olan tablolar bulmak olağandışı değildir. Ayrıca, kuruluşun bir bölümüne hizmet veren tabloların bir aday anahtarına başvurması ve kuruluşun başka bir bölümüne hizmet veren tabloların farklı bir aday anahtarına başvurması olağandışı değildir. Bu ilişkisel modelin güçlü yönlerinden biridir ve SQL'in oldukça iyi desteklediği ilişkisel modelin bir parçasıdır.
Yedek anahtar da içeren tablolarda doğal anahtarlara başvurduğunuzda iki sorunla karşılaşırsınız.
İlk olarak, insanları şaşırtacaksınız. Genellikle En Az Sürpriz İlkesi için güçlü bir şekilde lobi yapmama rağmen, bu şaşırtıcı insanları önemsemediğim bir durum. Sorun, geliştiricilerin yabancı anahtarların mantıksal kullanımı ile şaşırtması durumunda çözüm, yeniden tasarım değil eğitimdir.
İkincisi, ORM'ler genellikle ilişkisel model etrafında tasarlanmamıştır ve bazen en iyi uygulamayı yansıtmayan varsayımları içerirler. (Aslında, genellikle bir veritabanı uzmanından girdi olmadan tasarlanmış gibi görünüyorlar.) Her tabloda bir kimlik numarası gerekli bu varsayımlardan biridir. Bir diğeri, ORM uygulamasının veritabanına "sahip" olduğunu varsaymaktadır. (Bu nedenle tablo ve sütun oluşturmak, bırakmak ve yeniden adlandırmak ücretsizdir.)
30 yıl boyunca en az iki düzine dilde yazılmış yüzlerce uygulama programına veri sunan bir veritabanı sistemi üzerinde çalıştım. Bu veritabanı bir ORM'ye değil işletmeye aittir.
Kırılma değişikliklerine neden olan bir çatal, bir gösteri durdurucu olmalıdır.
Çalıştığım bir şirkette performansı hem doğal anahtarlarla hem de yedek anahtarlarla ölçtüm. Yedek anahtarların doğal anahtarlardan daha iyi performans göstermeye başladığı bir devrilme noktası vardır. ( Bölümleme, kısmi dizinler, işlev tabanlı dizinler, ekstra tablo alanları, katı hal diskleri kullanma vb. Gibi doğal anahtar performansını yüksek tutmak için ek bir çaba varsaymazsak.) Bu şirkete ilişkin tahminlerime göre, Bu arada, doğal anahtarlarla daha iyi performans elde ederler.
İlgili diğer cevaplar: Veritabanı Şemasında Karmaşık