2009-10-27 3 views
1

Je ne sais pas trop comment aborder ce problème:Conception de schéma de base de données: Que faire à propos des invitations non vérifiées?

Je crée une application Web qui a un système d'enregistrement d'invitation seulement. Un utilisateur admin envoie une invitation par e-mail à un utilisateur, l'utilisateur clique sur le lien et l'emmène sur une page où il peut créer un compte associé à son adresse e-mail.

Mon idée initiale était d'insérer une ligne dans ma table users, avec la colonne verified marquée false. Le problème est que j'ai le nom d'utilisateur, et le mot de passe comme champs obligatoires et le nom d'utilisateur doit être unique. Je ne peux donc pas insérer une ligne vide pour la remplir plus tard.

Dois-je créer une table séparée pour les invitations? Quelle serait la meilleure façon d'aborder ce type de scénario?

Mise à jour: L'administrateur saisira le prénom, le nom, l'adresse e-mail et le rôle de l'utilisateur (autorisations). J'ai donc besoin de stocker toutes ces choses dans la table des invitations. Je pourrais également stocker la date envoyée et mettre à jour cette valeur si l'email devait être envoyé de nouveau.

Répondre

5

Oui, vous devez créer une table distincte pour gérer les invitations.

Puis, quand une invitation est acceptée, vous avez quelques choix. Vous devez d'abord décider si vous devez conserver une association avec l'invitation d'origine, soit pour le suivi, soit pour l'arbre généalogique, ou à d'autres fins historiques.

Ensuite, le cas échéant, vous devrez décider comment vous allez le faire. Supprimer l'invitation et stocker toutes les informations pertinentes avec l'enregistrement de l'utilisateur? Conserver l'enregistrement d'invitation et définir une clé étrangère?

je pourrais être en mesure de donner un peu plus fine des conseils si je sais plus sur le système que vous souhaitez créer.

+0

J'ai ajouté une mise à jour à ma question. Si vous avez des questions plus spécifiques, s'il vous plaît demander. – Andrew

+0

Oui, je n'ai vraiment rien à ajouter. Vous allez juste vous demander comment vous devez vous préoccuper des informations historiques en termes de ce que vous gardez après l'invitation -> processus d'enregistrement. –

+0

merci, je n'avais pas pensé à quoi faire avec l'histoire jusqu'à votre réponse. – Andrew

4

Vous devez considérer les scénarios dans lesquels les invitations se perdent, se supprimé par accident, ou pour une foule d'autres raisons, ne sont pas utilisables et doivent être réexpédiés.

En outre, une invitation est une entité distincte d'un enregistrement. Je pense que vous devez créer un tableau distinct pour suivre les invite par rapport à voir qui se sont inscrits (dont qu'inviter)

+0

merci pour votre réponse. Je n'avais pas pensé à des emails d'invitation perdus/effacés avant votre réponse. – Andrew

0

deux façons de regarder cela. Si vous allez sur la route séparée où vous créez une autre table, que se passe-t-il lorsque la phase d'évaluation est terminée, devez-vous copier ces utilisateurs d'évaluation sur votre table utilisateur réelle? Les noms d'utilisateur peuvent être définis par défaut sur un GUID spécialement conçu que vous avez programmé pour gérer l'entrée dans la table de vos utilisateurs.

+0

Qu'entendez-vous par phase d'évaluation? – Andrew

+0

Je pense que jonh suppose que vous êtes en train de faire une bêta d'invitation seulement, comme google aime faire, et qu'à un moment donné, votre système serait ouvert à tous. J'ai l'impression de votre message que votre système sera toujours uniquement invité. –

+0

oui, c'est un système privé, inviter seulement. jamais ouvert au public. – Andrew

0

Je recommanderais un tableau séparé pour les invitations. Il me semble assez clair que votre invitation est essentiellement un jeton permettant à quelqu'un de s'inscrire.

+0

jeton, exactement! Un utilisateur ne peut pas s'inscrire à moins que son adresse e-mail (token) ait été ajoutée à la liste – Andrew

+0

hmm, à la lumière de votre récente mise à jour, je suppose que mon opinion a changé. auparavant, il n'était pas clair qu'il y avait beaucoup d'informations de compte spécifiées lors de l'envoi de l'invitation. Si l'administrateur connaît déjà son nom, son adresse e-mail, ses rôles, etc., alors vous pourriez tout aussi bien créer l'utilisateur et revenir à votre idée de colonne 'verifieded '. Vous pouvez toujours utiliser leur adresse e-mail comme nom d'utilisateur, que vous pouvez leur permettre de modifier après avoir vérifié/complété l'inscription. – HackedByChinese

0

Une table distincte me semble la plus logique. Cela vous permettrait de maintenir l'intégrité des données dans la table des utilisateurs et fournirait un modèle de données plus lisible. Il est plus facile de dire que "les invitations vont dans la table des invitations" que "les invitations vont dans la table des utilisateurs mais avec la colonne vérifiée définie sur" false ".

Questions connexes