Tablonun tüm sütunlarını içeren bir birincil anahtarın herhangi bir faydası var mı?


17

Tüm nulllable dört sütun içeren bir tablo var ve veri dört benzersiz bir kaydı ayırt etmek için gerekli olmasıdır. Bu, birincil anahtar yapacak olsaydım, tüm sütunları içermesi gerektiği anlamına gelir. Tabloya karşı sorgular neredeyse her zaman tek bir kaydı geri almak olacaktır, yani tüm sütunlar sorguda filtrelenecektir.

Her sütunun aranması gerekeceğinden, birincil bir anahtarın olması bana hiç fayda sağlar mı (kayıtların benzersizliğini güçlendirmenin yanı sıra)?

Yanıtlar:


12

Sizin durumunuzda bu alanlar doğal anahtardır.

Vekil anahtarı:

Yedek anahtarlar, “ticari” anlamı olmayan ve yalnızca tablodaki bir kaydı tanımlamak için kullanılan anahtarlardır. Bu tür anahtarlar ya veritabanı tarafından oluşturulur (örnek: SQL Server'da Kimlik, Oracle'da Sıra, DB2 UDB'de Sıra / Kimlik vb.) Ya da sistem tarafından oluşturulan değerlerdir (şemadaki bir tablo aracılığıyla oluşturulan gibi).

Doğal Anahtar:

Temsil ettiği özellik veritabanı şemasından bağımsız olarak tanımlamak için kullanılıyorsa, anahtarlar doğaldır. Bunun temel olarak anlamı, insanlar onları kullanırsa anahtarların doğal olmasıdır: Fatura Numaraları, Vergi Numaraları, SSN vb.

Yedek Anahtarlar ve Birincil Anahtar için Doğal Anahtarlar

İş ve veritabanı modeli yönetimini ayırmak için yedek anahtar eklemeyi tercih ederim. Diğer soru birincil anahtarda kümelenmiş ve kümelenmemiş dizin kullanmaktır. Değişiklikleri tablo halinde (statik olmayan tablo, yüksek yoğun ekleme veya güncelleme var), monoton olmayan artırılmış anahtarda kümelenmiş dizin kullanılması durumunda performansla ilgili sorun yaşarsınız.


2
Genelde insanlara, parçalı dizinleri ve düşük performansı garanti etmek istemedikçe yedek anahtar kullanmaları gerektiğini söylüyorum. Her zaman istisnalar vardır, ancak bu durumda çok, çok azdır.
AndrewSQL

7

Bu gibi durumlarda genellikle bir yedek anahtarınızın olması önerilir, bu nedenle diğer tablolardaki yabancı anahtarlar (ve harici olarak saklanabilecek kayıt referansları, örneğin bir http (s) isteğinin birini ifade ettiği sorgu dizelerinde taşınmış gibi) (satırlardaki veriler), satırdaki veriler değişirse değişmeyecek bir şeyleri belirtin. Bunu yaparsanız birincil anahtarınız olur.

Böyle bir yedek anahtar eklemezseniz, birincil anahtar olarak dört sütunun hepsine sahip olan erişim olan veriyi nasıl tanımladığınız göz önüne alındığında bir dezavantaj olmaz. Anahtarı tablo için kümelenmiş dizin yaparsanız, belirli bir satır için veri bulmak için aşağı diskte b-ağacında bir seviye olacak gibi istekleri yardımcı olacaktır.



0

Yalnızca 2 sütunu olan çoktan çoğa ilişkisini temsil eden bir tablonuz varsa, makul görünüyor.

Krş bu SO sorusu

Ama itiraf ediyorum, bu durumlarda bile Yedek Anahtarları eklediğimi itiraf ediyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.