Gerçekten temel noktaya (benim gördüğüm gibi) işaret eden bir cevap görmüyorum - yani, aynı gerçek dünya varlığı için tabloda iki giriş almayacağınızı garanti eden bir birincil anahtar veritabanında modellenmiştir). Bu gözlem, birincil anahtar için neyin iyi neyin kötü seçim olduğunu belirlemeye yardımcı olur.
Örneğin, (ABD) eyalet adları ve kodlarının bir tablosunda, ad veya kod birincil anahtar olabilir - bunlar iki farklı aday anahtar oluşturur ve bunlardan biri (normalde daha kısa olan - kod), birincil anahtar. İşlevsel bağımlılıklar teorisinde (ve bağımlılıkları birleştirmek - 1NF'den 5NF'ye - birincil anahtar olmaktan çok önemli olan aday anahtarlardır.
Bir karşı örnek için, insan adları genellikle birincil anahtar için kötü bir seçim yapar. "John Smith" veya benzer isimlerle anılan birçok insan var; İkinci isimleri hesaba katarsak bile (unutmayın: herkesin bir tane yoktur - örneğin, bende yok), çoğaltma için pek çok alan vardır. Sonuç olarak, insanlar adları birincil anahtar olarak kullanmazlar. Sosyal Güvenlik Numarası (SSN) veya Çalışan Numarası gibi yapay anahtarlar icat ederler ve bunları kişiyi belirlemek için kullanırlar.
İdeal bir birincil anahtar kısa, benzersiz, akılda kalıcı ve doğaldır. Bu özelliklerin benzersiz olması zorunludur; geri kalanın gerçek dünya verilerinin kısıtlamaları göz önüne alındığında esnemesi gerekir.
Belirli bir tablonun birincil anahtarını belirlemeye gelince, bu tablonun neyi temsil ettiğine bakmanız gerekir. Tablodaki hangi sütun değerleri kümesi veya kümeleri tablodaki her satırı benzersiz bir şekilde tanımlar? Bunlar aday anahtarlardır. Şimdi, her bir aday anahtar 4 veya 5 sütundan oluşuyorsa, bunların iyi bir birincil anahtar yapmak için fazla beceriksiz olduğuna karar verebilirsiniz (özellikle kısalık nedeniyle). Bu durumlarda, yapay olarak oluşturulmuş bir sayı olan bir vekil anahtar ekleyebilirsiniz. Çoğu zaman (ama her zaman değil), vekil anahtar için basit bir 32 bitlik tam sayı yeterlidir. Daha sonra bu yedek anahtarı birincil anahtar olarak atarsınız.
Bununla birlikte, diğer aday anahtarların (yedek anahtar için de bir aday anahtardır ve seçilen birincil anahtarın) hepsinin benzersiz tanımlayıcı olarak muhafaza edildiğinden emin olmalısınız - normalde bu sütun kümelerine benzersiz bir kısıtlama koyarak.
Bazen insanlar bir satırı neyin benzersiz kıldığını belirlemekte zorlanır, ancak bunu yapacak bir şey olmalıdır, çünkü bir bilgiyi basitçe tekrarlamak onu artık doğru yapmaz. Dikkatli olmazsanız ve aynı bilgileri sakladığını iddia eden iki (veya daha fazla) satır alırsanız ve ardından bilgileri güncellemeniz gerekirse, yalnızca bir satırı güncellemeniz (özellikle imleç kullanıyorsanız) tehlikesi vardır. her satır yerine, bu nedenle satırlar eşzamanlı değildir ve hiç kimse hangi satırın doğru bilgileri içerdiğini bilmez.
Bu, bazı açılardan oldukça katı bir görüş.
Gerektiğinde bir GUID kullanmakla ilgili özel bir sorunum yok, ancak büyük olma eğilimindeler (16-64 baytta olduğu gibi) ve çok sık kullanılıyorlar. Çoğu zaman, mükemmel derecede iyi bir 4 baytlık değer yeterli olacaktır. 4 baytlık bir değerin yeterli olacağı bir GUID kullanmak, disk alanını boşa harcar ve dizin sayfası başına daha az değer olduğundan, verilere dizinlenmiş erişimi bile yavaşlatır, bu nedenle dizin daha derin olur ve daha fazla sayfanın okunması gerekir. bilgi.