7 votes

Pourquoi créer des tableaux en cours d'exécution (code derrière) est mauvais ?

Les gens suggèrent d'éviter de créer des tables de base de données de manière dynamique (ou en cours d'exécution), en disant que c'est une mauvaise pratique et qu'il sera difficile de les maintenir.

Je ne vois pas pourquoi, et je ne vois pas de différence entre la création d'une table et toute autre requête ou instruction SQL telle que SELECT ou INSERT. J'ai écrit des applications qui créent, suppriment et modifient la base de données et les tables en cours d'exécution, et jusqu'à présent je ne vois aucun problème de performance.

Quelqu'un peut-il expliquer les inconvénients de la création d'une base de données et de tables en cours d'exécution ?

3voto

Paul Sasik Points 37766

Les tables sont des entités beaucoup plus complexes que les lignes et la gestion de la création d'une table est beaucoup plus complexe qu'une insertion qui doit se conformer à un modèle existant, la table. Il est vrai que l'instruction de création d'une table est une opération SQL standard, mais le fait de dépendre de la création dynamique de ces tables relève d'une mauvaise décision de conception.

Maintenant, si vous créez juste un ou deux et c'est tout, ou une base de données entière dynamiquement, ou à partir d'un script une fois, cela pourrait être ok. Mais si vous dépendez de la nécessité de créer de plus en plus de tables pour gérer vos données, vous devrez également joindre de plus en plus et interroger de plus en plus. Un problème très sérieux que j'ai rencontré avec une application qui utilisait la création dynamique de tables est qu'une seule requête SQL Server ne peut impliquer que 255 tables. C'est une contrainte intégrée. (Et c'est SQL Server, pas CE.) Il a suffi de quelques semaines en production pour que cette limite soit atteinte et que l'application ne fonctionne plus.

Et si vous vous mettez à modifier les tableaux, par exemple en ajoutant ou en supprimant des colonnes, le casse-tête de la maintenance s'aggrave encore. Il y a aussi la question de la liaison entre les données de votre base de données et la logique de votre application. Un autre problème est la mise à niveau des bases de données de production. Ce serait un véritable défi si une base de données avait été enrichie d'objets de manière dynamique et que vous deviez soudainement mettre à jour le modèle.

Lorsque vous devez stocker des données d'une manière aussi dynamique, la pratique standard est de faire appel à Modèles de VAE . Vous disposez de tables fixes et vos données sont ajoutées dynamiquement sous forme de lignes, de sorte que votre schéma ne doit pas changer. Il y a bien sûr des inconvénients, mais c'est généralement considéré comme une meilleure pratique.

2voto

kobe Points 7925

KMC ,

Rappelez-vous les points suivants

  1. Si vous voulez ajouter ou supprimer une colonne, vous devez modifier le code et le compiler à nouveau.
  2. que faire si l'emplacement de la base de données change
  3. Les développeurs qui ne sont pas très doués pour les bases de données peuvent apporter des modifications, si vous créez le schéma à l'arrière-plan, les administrateurs de bases de données peuvent s'en occuper.
  4. Si vous rencontrez des problèmes de performance, cela peut devenir difficile à déboguer.

0voto

Erik Funkenbusch Points 53436

Vous devez être un peu plus clair sur ce que vous entendez par "création de tableaux".

Une raison pour ne pas permettre à l'application de contrôler la création et la suppression des tables est qu'il s'agit d'une tâche qui ne doit être gérée que par un administrateur. Vous ne voulez pas que les utilisateurs normaux aient la possibilité de supprimer des tables entières.

Les tables temporaires sont une autre histoire, et vous pouvez avoir besoin de créer des tables temporaires dans le cadre de vos requêtes, mais la structure de base de votre base de données ne doit être gérée que par une personne ayant les droits nécessaires pour le faire.

0voto

Zen Pak Points 548

Parfois, la création de tables de façon dynamique n'est pas la meilleure option du point de vue de la sécurité (Google SQL injection), et il serait préférable d'utiliser des procédures stockées et de faire en sorte que vos opérations d'insertion ou de mise à jour se produisent au niveau de la base de données en exécutant les procédures stockées dans le code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X