Saya dibesarkan di sekolah lama - tempat kami belajar merancang skema basis data SEBELUM lapisan bisnis aplikasi (atau menggunakan OOAD untuk yang lainnya). Saya sudah cukup baik dengan merancang skema (IMHO :) dan dinormalisasi hanya untuk menghapus redundansi yang tidak perlu tetapi tidak di tempat yang berdampak kecepatan yaitu jika bergabung adalah hit kinerja, redundansi dibiarkan di tempat. Tapi kebanyakan tidak.
Dengan munculnya beberapa kerangka kerja ORM seperti Ruby ActiveRecord atau ActiveJDBC (dan beberapa yang lainnya saya tidak ingat, tapi saya yakin ada banyak) tampaknya mereka lebih suka memiliki kunci pengganti untuk setiap tabel bahkan jika beberapa memiliki kunci primer seperti 'email' - melanggar 2NF secara langsung. Oke, saya mengerti tidak terlalu banyak, tapi itu membuat saya kesal (hampir) ketika beberapa ORM ini (atau programmer) tidak mengakui 1-1 atau 1-0 | 1 (yaitu 1 ke 0 atau 1). Mereka menetapkan bahwa lebih baik memiliki semuanya sebagai satu meja besar tidak masalah jika memiliki satu ton nulls
"sistem hari ini dapat mengatasinya" adalah komentar yang sering saya dengar.
Saya setuju bahwa kendala memori memang memiliki korelasi langsung dengan normalisasi (ada manfaat lain juga :) tetapi di zaman sekarang dengan memori murah dan mesin quad-core, apakah konsep normalisasi DB hanya diserahkan pada teks? Sebagai DBA apakah Anda masih mempraktikkan normalisasi ke 3NF (jika tidak BCNF :)? Apakah itu penting? Apakah "skema kotor" bagus untuk sistem produksi? Hanya bagaimana seseorang membuat kasus "untuk" normalisasi jika masih relevan.
( Catatan: Saya tidak berbicara tentang skema bintang / kepingan salju datawarehouse yang memiliki redundansi sebagai bagian / kebutuhan desain tetapi sistem komersial dengan database backend seperti StackExchange misalnya)