J'ai été élevé à l'ancienne - où nous avons appris à concevoir le schéma de base de données AVANT la couche métier de l'application (ou à utiliser OOAD pour tout le reste). J'ai été assez bon pour concevoir des schémas (à mon humble avis :) et normalisé uniquement pour supprimer la redondance inutile, mais pas là où cela a eu un impact sur la vitesse, c'est-à-dire que si les jointures étaient un problème de performances, la redondance était laissée en place. Mais ce n'était généralement pas le cas.
Avec l'avènement de certains cadres ORM comme Ruby ActiveRecord ou ActiveJDBC (et quelques autres dont je ne me souviens pas, mais je suis sûr qu'il y en a beaucoup), il semble qu'ils préfèrent avoir une clé de substitution pour chaque table même si certains ont des clés primaires comme 'e-mail' - cassant carrément 2NF. D'accord, je ne comprends pas trop, mais cela me fait (presque) peur quand certains de ces ORM (ou programmeurs) ne reconnaissent pas 1-1 ou 1-0 | 1 (c'est-à-dire 1 à 0 ou 1). Ils stipulent qu'il est juste préférable d'avoir tout comme une grande table, peu importe si elle a une tonne de nulls
"systèmes d'aujourd'hui peuvent le gérer", c'est le commentaire que j'ai entendu le plus souvent.
Je suis d'accord que les contraintes de mémoire ont eu une corrélation directe avec la normalisation (il y a aussi d'autres avantages :) mais à l' heure actuelle avec la mémoire bon marché et les machines quad-core, le concept de normalisation DB est-il laissé aux textes? En tant que DBA, pratiquez-vous toujours la normalisation à 3NF (sinon BCNF :)? Est-ce que ça importe? La conception de "schéma sale" est-elle bonne pour les systèmes de production? Comment doit-on plaider en faveur de la normalisation si elle est toujours pertinente?
( Remarque: je ne parle pas des schémas en étoile / flocon de neige de Datawarehouse qui ont une redondance en tant que partie / besoin de la conception, mais des systèmes commerciaux avec une base de données principale comme StackExchange par exemple)