Мене виховували старі школи - де ми навчилися проектувати схему баз даних перед діловим рівнем програми (або використовуючи OOAD для всього іншого). Я досить добре розробляв схеми (IMHO :) і нормалізувався лише для видалення зайвих надмірностей, але не там, де це вплинуло на швидкість, тобто якщо приєднання були хітом для продуктивності, надмірність залишилася на місці. Але в основному це не було.
З появою деяких фреймворків ORM, таких як ActiveRecord Ruby або ActiveJDBC (і деяких інших, яких я не можу згадати, але я впевнений, що їх багато), схоже, вони вважають за краще мати сурогатний ключ для кожної таблиці, навіть якщо в деяких є первинні ключі, наприклад "електронна пошта" - виривання 2NF прямо. Гаразд, я не дуже розумію, але це стає мені на нерви (майже), коли деякі з цих ОРМ (або програмістів) не визнають 1-1 або 1-0 | 1 (тобто 1 до 0 або 1). Вони стверджують, що просто краще мати все як один великий стіл, незалежно від того, чи є він у тоні nulls
"сьогоднішні системи можуть це впоратися" - це коментар, який я чув частіше.
Я погоджуюся, що обмеження пам'яті несло пряме співвідношення з нормалізацією (є й інші переваги :), але в сьогоднішній час з дешевою пам'яттю та чотирьохядерними машинами концепція нормалізації БД залишається лише текстами? Як DBA ви все ще практикуєте нормалізацію до 3NF (якщо не BCNF :)? Це важливо? Чи хороша конструкція "брудної схеми" для виробничих систем? Тільки, як слід зробити випадок «для» нормалізації, якщо він все ще актуальний.
( Примітка. Я не говорю про схеми зірок / сніжинок даних сховища даних, які є надмірністю як частина / потреба дизайну, але комерційні системи із базовою базою даних, наприклад, StackExchange)