Birincil anahtarla ilgili özel olan nedir?
Şemadaki bir tablonun amacı nedir? Bir tablonun anahtarının amacı nedir? Birincil anahtarla ilgili özel olan nedir? Birincil anahtarların etrafındaki tartışmalar, birincil anahtarın bir tablonun parçası olduğu ve bu tablonun bir şemanın parçası olduğu noktasını gözden kaçırıyor gibi görünüyor. Tablo ve tablo ilişkileri için en iyi olanı kullanılan anahtarı kullanmalıdır.
Tablolar (ve tablo ilişkileri) kaydetmek istediğiniz bilgilerle ilgili gerçekleri içerir. Bu gerçekler bağımsız, anlamlı, kolay anlaşılır ve çelişkili olmamalıdır. Tasarım açısından, şemaya eklenen veya şemadan kaldırılan diğer tablolar, söz konusu tabloyu etkilememelidir. Yalnızca bilginin kendisiyle ilgili verilerin depolanması için bir amaç olmalıdır. Bir tabloda nelerin depolandığını anlamak için bir bilimsel araştırma projesi yapılmasını gerektirmemelidir. Aynı amaç için saklanan hiçbir bilgi bir kereden fazla saklanmamalıdır. Anahtarlar, kaydedilen bilginin bir kısmı veya bir kısmıdır ve birincil anahtar, tabloya birincil erişim noktası olacak özel olarak belirlenmiş anahtardır (yani, yalnızca eklemek için değil, veri tutarlılığı ve kullanımı için seçilmelidir verim).
- ASIDE: Maalesef, çoğu zaman uygulama programcıları tarafından tasarlanan ve geliştirilen veritabanlarının yan etkisi (bazen ben olduğum), uygulama veya uygulama çerçevesi için en iyi olanın genellikle tablolar için birincil anahtar seçimini yönlendirmesidir. Bu, tamsayı ve GUID anahtarlarına (bunlar uygulama çerçeveleri için kullanımı basit olduğu için) ve monolitik tablo tasarımlarına (bellekteki verileri temsil etmek için gereken uygulama çerçevesi nesnelerinin sayısını azalttığından) yol açar. Bu uygulama odaklı veritabanı tasarım kararları, ölçekte kullanıldığında önemli veri tutarlılığı sorunlarına yol açar. Bu şekilde tasarlanan uygulama çerçeveleri doğal olarak bir seferde tablolara yol açar. Tablolarda ve zaman içinde doldurulmuş verilerde “kısmi kayıtlar” oluşturulur. Çok tablolu etkileşimden kaçınılır veya kullanıldığında, uygulama düzgün çalışmadığında tutarsız verilere neden olur. Bu tasarımlar anlamsız (veya anlaşılması zor) verilere, tablolara yayılmış verilere (geçerli tabloyu anlamak için diğer tablolara bakmanız gerekir) ve çoğaltılmış verilere yol açar.
Birincil anahtarların gerektiği kadar küçük olması gerektiği söylendi. Anahtarların sadece gerektiği kadar büyük olması gerektiğini söyleyebilirim. Bir tabloya rastgele anlamsız alanlar eklemekten kaçınılmalıdır. Rastgele eklenen anlamsız bir alandan, özellikle başka bir tablodan birincil olmayan anahtara birleştirme bağımlılığını yok ettiğinde bir anahtar yapmak daha da kötüdür. Bu, yalnızca tabloda iyi bir aday anahtarı yoksa makul olur, ancak bu oluşum, tüm tablolar için kullanılıyorsa kesinlikle kötü bir şema tasarımının bir işaretidir.
Birincil anahtarın güncellenmesi her zaman söz konusu olmadığı için birincil anahtarların asla değişmemesi gerektiği de söylendi. Ancak güncelleme, silme ve ardından ekleme ile aynıdır. Bu mantıkla hiçbir zaman bir anahtar içeren bir tablodan kayıt silmemeli ve sonra ikinci anahtarla başka bir kayıt eklememelisiniz. Yedek birincil anahtarı eklemek, tablodaki diğer anahtarın var olduğu gerçeğini kaldırmaz. Bir tablonun birincil olmayan bir anahtarını güncellemek, diğer tabloların bir yedek anahtar aracılığıyla bu anlama bağımlı olması durumunda verilerin anlamını yok edebilir (örneğin, durum açıklaması 'İşlendi' yerine 'İptal edildi olan yedek anahtarlı bir durum tablosu 'kesinlikle verileri bozar). Her zaman söz konusu olmaması gereken, veri anlamını yok etmektir.
Bunu söyledikten sonra, bugün işletmelerde var olan birçok kötü tasarlanmış veritabanına minnettarım (anlamsız-vekil-anahtarlı-veri-bozuk-1NF behemoths), çünkü bu, uygun veritabanı tasarımını anlayan insanlar için sonsuz miktarda çalışma olduğu anlamına gelir. . Ama üzücü tarafta, bazen beni Sisifos gibi hissettiriyor, ama bahse girerim (çarpışmadan önce) 401k'lik bir heck vardı. Önemli veritabanı tasarımı soruları için bloglardan ve web sitelerinden uzak durun. Veritabanları tasarlıyorsanız, CJ Date'e bakın. SQL Server için Celko'ya da başvurabilirsiniz, ancak önce burnunuzu tutarsanız. Oracle tarafında Tom Kyte'e başvurun.