2010-12-11 50 views
7

J'écris ma première application web, et j'en connais assez sur les bases de données pour savoir que le schéma est important mais pas assez pour savoir comment en écrire un bon.Faut-il créer une nouvelle table pour chaque utilisateur sur une application Web?

Existe-t-il un protocole standard pour le traitement des informations stockées dans chaque compte d'utilisateur? Mon instinct est d'avoir une table qui stocke la clé de l'utilisateur et les informations de connexion, et un handle à leur table (probablement la clé?), Et puis avoir une table pour chaque utilisateur.

Mais je me demande s'il y a des problèmes de performance pour avoir une table pour chaque utilisateur ou si cela semble une manière incroyablement stupide de le faire. Cela semble être un "problème résolu" puisque toutes les applications web ont des comptes utilisateurs, mais je n'ai rien trouvé grâce à la recherche. Existe-t-il des ressources avec des schémas "résolus" pour stocker diverses sortes de données Web?

+0

Je sais que c'est un peu vieux mais je pensais la même chose pour des raisons de sécurité. par exemple, pour empêcher les autres utilisateurs d'accéder à d'autres tables, à l'exception des leurs. –

+0

@SalemF Donc, oui, il y a des problèmes de sécurité potentiels, mais il y a des problèmes de sécurité encore plus grands avec des tables séparées. En d'autres termes, vous ne voulez pas que votre application Web crée des tableaux à la volée. Vous souhaitez uniquement ajouter ou supprimer des données dans la table. Ajouter et créer des tables est un niveau d'autorisation supérieur à l'ajout et à la suppression de lignes. Et vous ne souhaitez pas que votre application Web dispose des autorisations nécessaires pour créer ou supprimer des tables. C'est ainsi que votre base de données entière est supprimée ou copiée par un pirate informatique. Il y a d'autres raisons, mais c'est la raison de sécurité. – araneae

+0

@aranesa vous avez raison, il s'agit du niveau d'autorisation, si les utilisateurs peuvent accéder aux autres, il peut accéder à d'autres tables. mais l'idée était de garder les utilisateurs sur sa propre table seulement et ne fournir aucune permission pour supprimer ou créer de nouvelles tables.l'un ou l'autre des moyens du hacker contrôlant la DB il fera ce qu'il veut –

Répondre

11

Habituellement, vous ne créez pas de table séparée pour chaque utilisateur - cette solution n'est pas bien adaptée. A la place, vous placez généralement toutes les données des utilisateurs dans une seule table (ou une table par type de données) et utilisez les conditions de la clause WHERE pour vous assurer qu'un utilisateur peut uniquement lire/écrire ses propres données.

0

Oui, ce n'est certainement pas une bonne idée. Ce que vous devriez faire est de vous familiariser avec un framework d'application web car la plupart d'entre eux vous le fournissent déjà. Le bon choix est par exemple Django.

+0

Cela sorte de l'apprentissage hors de lui ..... Je suis ici parce que je ne peux pas utiliser Django pour le serveur de mon application écrit entièrement dans mysql et python et besoin de trouver de bons moyens de concevoir une base de données. – nsij22

4

À moins que votre application ne soit quelque chose de très personnalisé, vous souhaiterez choisir un framework d'application Web avec lequel travailler. Pour les choses simples, les cadres les plus courants fonctionnent à peu près aussi bien (bien qu'il y ait un certain désaccord enragé à ce sujet). Je vais supposer que vous avez un langage de programmation où vous vous sentez que vous êtes le plus fort, donc je vous suggère de le laisser être votre guide principal pour un framework web. Certains cadres communs par langue sont (ce n'est pas même un près à une liste exhaustive):

Quant à votre question sur le schéma, vous pouvez regarder database normalization. La plupart des frameworks auront déjà des outils pour gérer la création et l'authentification des utilisateurs, mais en général, vous ne voudrez jamais créer une table par utilisateur. L'approche la plus courante consiste à utiliser une table appelée users, dont la clé primaire est id et qui est ensuite utilisée comme clé étrangère faisant référence à d'autres données.