Mysql
 sql >> Base de données >  >> RDS >> Mysql

Tables de base de données dynamiques dans Django

Une question intéressante, qui pourrait être d'un intérêt plus large.

Créer une table par utilisateur est un cauchemar de maintenance. Vous devez plutôt définir une seule table pour contenir toutes les données des utilisateurs, puis utiliser les capacités de la base de données pour récupérer uniquement les lignes appartenant à l'utilisateur qui vous intéresse (après avoir vérifié les autorisations si nécessaire, car il n'est pas judicieux de donner à un utilisateur un accès illimité accès aux données d'un autre utilisateur sans que des autorisations spécifiques aient été définies).

L'adoption de la solution que vous proposez nécessite que vous construisiez des instructions SQL contenant le nom de table de l'utilisateur concerné. Les requêtes successives à la base de données seront pour la plupart différentes, ce qui ralentira le travail car chaque instruction SQL doit être "préparée" (la syntaxe doit être vérifiée, les noms de table et de colonnes doivent être vérifiés, l'autorisation de l'utilisateur demandeur pour accéder aux ressources nommées doit être autorisé, et ainsi de suite).

En utilisant une seule table (modèle), les mêmes requêtes peuvent être utilisées à plusieurs reprises, avec des paramètres utilisés pour faire varier des valeurs de données spécifiques (dans ce cas, le nom de l'utilisateur dont les données sont recherchées). Votre travail de base de données avancera plus rapidement, vous n'aurez besoin que d'un seul modèle pour décrire les données de tous les utilisateurs et la gestion de la base de données ne sera pas un cauchemar.

Un autre avantage est que Django (que vous semblez utiliser) dispose d'un modèle d'autorisation étendu basé sur l'utilisateur et peut facilement être utilisé pour authentifier la connexion de l'utilisateur (une fois que vous savez comment). Ces avantages sont si convaincants que j'espère que vous vous rétracterez de votre hérésie et déciderez que vous pouvez vous en sortir avec une seule table (et, si vous envisagez d'utiliser des connexions Django standard, une relation avec le modèle Utilisateur qui constitue un élément central de tout Django projet).

N'hésitez pas à poser d'autres questions au fur et à mesure. Il semble que vous soyez nouveau dans le travail sur les bases de données, et j'ai donc essayé de présenter un niveau de détail approprié. Il existe de nombreux pièges comme celui-ci si vous ne pouvez pas accéder à des conseils avisés. Les gens sur SO vous aideront.