Ich bin in der alten Schule aufgewachsen - wo wir gelernt haben, das Datenbankschema VOR der Geschäftsschicht der Anwendung zu entwerfen (oder OOAD für alles andere zu verwenden). Ich war ziemlich gut mit dem Entwerfen von Schemas (IMHO :) und normalisierte nur, um unnötige Redundanz zu entfernen, aber nicht, wenn dies die Geschwindigkeit beeinträchtigte. Aber meistens war es nicht so.
Mit dem Aufkommen einiger ORM-Frameworks wie Rubys ActiveRecord oder ActiveJDBC (und einiger anderer, an die ich mich nicht erinnern kann, aber ich bin mir sicher, dass es viele gibt) scheint, dass sie es vorziehen, einen Ersatzschlüssel für jede Tabelle zu haben, selbst wenn einige Primärschlüssel wie haben "E-Mail" - 2NF sofort brechen. Okay, ich verstehe nicht zu viel, aber es geht mir (fast) auf die Nerven, wenn einige dieser ORMs (oder Programmierer) nicht 1-1 oder 1-0 | 1 (dh 1 zu 0 oder 1) bestätigen. Sie schreiben vor, dass es einfach besser ist, alles als einen großen Tisch zu haben, egal ob es eine Tonne nulls
"heutige Systeme können damit umgehen" hat, ist der Kommentar, den ich öfter gehört habe.
Ich stimme zu, dass Speicherbeschränkungen in direktem Zusammenhang mit der Normalisierung standen (es gibt auch andere Vorteile :), aber ist das Konzept der DB-Normalisierung in der heutigen Zeit mit billigem Speicher und Quad-Core-Computern nur den Texten überlassen? Üben Sie als DBAs noch die Normalisierung auf 3NF (wenn nicht BCNF :)? Ist das wichtig? Ist das Design eines "schmutzigen Schemas" gut für Produktionssysteme? Wie soll man die Normalisierung begründen, wenn sie noch relevant ist?
( Hinweis: Ich spreche nicht von den Stern- / Schneeflockenschemata von Datawarehouse, die Redundanz als Teil / Bedarf des Designs haben, sondern von kommerziellen Systemen mit einer Backend-Datenbank wie z. B. StackExchange.)