Uygulamanın iş katmanından ÖNCE (veya her şey için OOAD kullanarak) veritabanı şemasını tasarlamayı öğrendiğimiz eski okulu büyüttüm. Şemaları (IMHO :) tasarlama konusunda oldukça iyiyim ve sadece gereksiz yedekliliği kaldırmak için normalleştirildim, ancak hızı etkilediği yerde değil, yani birleşimler bir performans isabetiyse, yedeklilik yerinde kaldı. Ama çoğunlukla öyle değildi.
Ruby'nin ActiveRecord veya ActiveJDBC gibi bazı ORM çerçevelerinin ortaya çıkmasıyla (ve hatırlayamadığım birkaç tane, ama eminim bol var) bazı birincil anahtarlar olsa bile her tablo için bir yedek anahtara sahip olmayı tercih ediyor gibi görünüyor 'email' - 2NF'yi açıkça kırma. Tamam, çok fazla anlamadım, ancak bu ORM'lerin (veya programcıların) 1-1 veya 1-0 | 1'i (yani 1 ila 0 veya 1) kabul etmediği zaman sinirleri alır (neredeyse). Onlar bir ton nulls
"bugünün sistemleri halledebilir" olursa olsun, her şeyi tek bir büyük tablo olarak sahip olmak daha iyi olduğunu daha sık duydum yorumdur.
Bellek kısıtlamalarının normalleşmeyle doğrudan bir korelasyonu olduğunu kabul ediyorum (başka faydaları da var :) ama günümüzde ucuz bellek ve dört çekirdekli makinelerle DB normalleştirme kavramı metinlere bırakıldı mı? DBA'lar olarak hala 3NF'ye normalleştirme uyguluyor musunuz (BCNF değilse)? Önemli mi? "Kirli şema" tasarımı üretim sistemleri için iyi midir? Eğer hala konuyla ilgiliyse, normalleştirme durumu "nasıl" yapmalıdır.
( Not: Tasarımın bir parçası / ihtiyacı olarak artıklık içeren datawarehouse'un yıldız / kar tanesi şemalarından değil, örneğin StackExchange gibi bir arka uç veritabanına sahip ticari sistemlerden bahsetmiyorum)