web-dev-qa-db-fra.com

Jusqu'où devriez-vous aller avec la normalisation?

J'ai une quantité décente de données dans une base de données. J'ai des tables bien formées et de bonnes relations entre eux avec une certaine redondance dans mes données. Mais jusqu'où devrais-je aller avec la normalisation? Y a-t-il des inconvénients de performance à trop de normalisation?

31
Fergus

Je pense qu'il est tout aussi important de regarder les dénormalisations ajoutées explicites, soit ajout de valeurs agrégées, soit certains champs d'une table principale copiée à une copie de détail.

L'argument est principalement un argument de performance.

Si vous faites aussi, que ces champs sont mis à jour par des déclencheurs et que la base de données est à la hauteur de les garder cohérents.

2
bernd_k

Je suis totalement d'accord avec @jcolebrand. Lorsque vous concevez un modèle pour votre application, vous devez normaliser tout ce que vous pouvez. Mais vous devriez ensuite profiler les requêtes construites sur votre modèle, en particulier celles exécutées fréquemment.

Ma propre expérience: des attributs qui ont pris deux jointures pour atteindre (cela signifie que trois tables jointes) seront surtout un porc de performance. Et pour faire pire les choses, il est utilisé dans des transactions en ligne. Je dénormalise l'attribut, de sorte que cela a juste besoin d'une jointure et j'ai demandé au programmeur d'ajuster leur application pour la requête et de mettre à jour l'attribut. Maintenant, ça marche beaucoup mieux ...

Dans un autre mot, vous devez équilibrer la normalisation avec performance.

2
Isaac A. Nugroho