Wychowałem się w starej szkole - gdzie nauczyliśmy się projektować schemat bazy danych PRZED warstwą biznesową aplikacji (lub używając OOAD do wszystkiego innego). Byłem całkiem dobry w projektowaniu schematów (IMHO :) i znormalizowałem tylko, aby usunąć niepotrzebną redundancję, ale nie tam, gdzie wpłynęło to na szybkość, tj. Jeśli złączenia były hitem wydajności, redundancja pozostała na miejscu. Ale przeważnie tak nie było.
Wraz z pojawieniem się niektórych środowisk ORM, takich jak ActiveRecord Ruby lub ActiveJDBC (i kilka innych, których nie pamiętam, ale jestem pewien, że jest ich mnóstwo), wydaje się, że wolą mieć klucz zastępczy dla każdej tabeli, nawet jeśli niektóre mają klucze podstawowe, takie jak „email” - całkowite zerwanie 2NF. Ok, nie rozumiem zbyt wiele, ale działa mi to na nerwy (prawie), gdy niektóre z tych ORM (lub programistów) nie potwierdzają 1-1 lub 1-0 | 1 (tj. 1 do 0 lub 1). Zastrzegają, że po prostu lepiej mieć wszystko jako jeden duży stół, bez względu na to, czy ma mnóstwo nulls
„dzisiejszych systemów to da”, to komentarz, który słyszę częściej.
Zgadzam się, że ograniczenia pamięci miały bezpośrednią korelację z normalizacją (są też inne korzyści :) ale w dzisiejszych czasach przy taniej pamięci i maszynach czterordzeniowych czy koncepcja normalizacji DB została pozostawiona tekstom? Jako DBA nadal ćwiczysz normalizację do 3NF (jeśli nie BCNF :)? Czy to ma znaczenie? Czy projektowanie „brudnego schematu” jest dobre dla systemów produkcyjnych? Jak należy argumentować za normalizacją „jeśli” jest nadal aktualna.
( Uwaga: nie mówię o schematach gwiazdy / płatka śniegu w magazynie danych, które mają nadmiarowość jako część / potrzebę projektu, ale systemy komercyjne z bazą danych zaplecza, na przykład StackExchange)