Est-ce une bonne idée d'utiliser des tables normalisées avec des vues indexées dénormalisées?

StackOverflow https://stackoverflow.com/questions/191642

Question

Je suis en train de concevoir une nouvelle application avec un ratio lecture / écriture élevé. Chez mon employeur actuel, nous avons beaucoup de données dénormalisées sur nos tables pour des raisons de performances. Est-il préférable d’avoir des tables totalement 3NF et d’utiliser ensuite des vues indexées pour effectuer toute la dénormalisation? Devrais-je exécuter des requêtes sur les tables ou les vues?

Voici un exemple de ce qui m'intéresse, ce sont les agrégats de tables enfants de colonnes (par exemple, le nombre de publications de l'utilisateur stocké quelque part).

Était-ce utile?

La solution

En général, il est judicieux d’avoir des vues dénormalisées si vous devez accéder à plusieurs tables normalisées très fréquemment. Dans la plupart des cas, les jointures et les requêtes effectuées directement sur les tables entraînent une augmentation significative des performances, ce qui n’est généralement pas moins facile à gérer, car votre vue ou la jointure peut être écrite de manière à rester agnostique à propos des modifications apportées à certaines parties des tables. il n'utilise pas.

Si toutes toutes vos tables doivent figurer dans la troisième forme normale, cela est une autre question. Dans la plupart des applications avec lesquelles j'ai travaillé, la réponse est la plupart des tableaux doivent être normalisés de cette façon, à quelques exceptions près. Le fait de faire une exception dépend de la manière dont les données sont utilisées et de savoir si vous pouvez être sûr que cette utilisation ne changera pas à l'avenir.

Devoir revenir en arrière et revenir à la normalisation plus tard parce que vous avez fait quelque chose dans le mauvais sens peut coûter cher, mais normaliser des données qui devraient être simples à utiliser et à comprendre peut rendre les choses plus compliquées et plus difficiles à gérer que nécessaire. . Votre kilométrage peut varier.

Autres conseils

Si vous envisagez d'utiliser des vues pour présenter des données dénormalisées à l'utilisateur (et que vous utilisez SQL Server), vous devez extraire la clause SCHEMABINDING. Si une vue est liée à un schéma, vous pouvez l'indexer et l'index sera mis à jour lors de la mise à jour des tables sous-jacentes. De cette manière, si les index sont correctement configurés, les personnes à la recherche de données peuvent en réalité sélectionner un index, ce qui évite de devoir reconstruire la vue complexe pour chaque requête, mais les utilisateurs pourront toujours voir les mises à jour. date à laquelle les tables sous-jacentes changent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top