2009-10-20 8 views
2

Je crée un forum de discussion (en quelque sorte) dans ASP.NET MVC, et j'ai besoin d'autoriser les publications de visiteurs non enregistrés. Les visiteurs n'ont qu'à spécifier un alias à publier, et peuvent éventuellement fournir une adresse e-mail et une URL de site Web.Utilisateurs non enregistrés dans la base de données

Quelle est la meilleure pratique pour gérer les messages d'utilisateurs non enregistrés dans une base de données?

Je suis un peu d'un débutant dans la conception de base de données, mais ces options viennent à l'esprit:

  1. Insérer un nouveau record dans la table des utilisateurs pour chaque poste par un visiteur non enregistré. (Faciliterait les requêtes lorsque les enregistrements dans les tables Posts et Users auront une relation 1-à-1, mais gonfle la table Users)
  2. Créer une nouvelle table pour les utilisateurs non enregistrés et créer de nouvelles entrées pour les nouvelles combinaisons alias-email-url , réutiliser ceux qui existent déjà. (Dans un tel scénario, aurais-je deux clés étrangères dans la table Posts pour RegisteredUserId et UnregisteredUserId?)
  3. Ajoutez les champs UnregisteredAlias, UnregisteredEmail et UnregisteredUrl directement au tableau Posts. (Terriblement dénormalisé, mais encore une fois cela me semble une solution propre Est-ce que je devrais alors rendre le champ UserId de la table Posts nullable, et le mettre à null pour ces messages?).
  4. La solution évidente que je n'ai pas encore pensée?

Est-ce que l'une de ces solutions causerait des problèmes avec le mappage LINQ To SQL?

Edit:

Pour clarifier les choses, je dois enregistrer un alias (un nom) et une adresse e-mail facultative et url pour chaque poste faite par un visiteur non enregistré. Cette information est affichée avec le message, donc visiteur! = Anonyme dans ce cas.

Répondre

2

Je voudrais aller avec le système d'adhésion de ASP.NET out of the box. Vous avez la possibilité d'autoriser les utilisateurs anonymes à cet endroit. Une fois qu'ils ont créé un identifiant, les propriétés de leur compte sont migrées.

Les utilisateurs non enregistrés auraient besoin d'une propriété "UserName". Cela ne serait utilisé que pour afficher le nom d'utilisateur. Ils seraient identifiés par leur identifiant d'utilisateur anonyme.

0

Le problème avec l'alias est que sans une forme d'enregistrement d'utilisateur, un autre utilisateur serait en mesure de poster avec le même alias, et ainsi "reprendre" son identité.

Je pense que je devrais rendre UserId facultatif dans le tableau Users ou un mappage 1-1 entre les utilisateurs et les messages et ajouter une deuxième table pour contenir le Email/Url/(Alias) pour les utilisateurs non enregistrés.

1

Personnellement, j'opte pour l'option 1, "Insérer un nouvel enregistrement dans la table des utilisateurs pour chaque poste par un visiteur non inscrit."

Pourquoi? Eh bien, un utilisateur est un utilisateur, non? Le fait qu'ils aient enregistré sur votre site devient une propriété de cet utilisateur (c'est-à-dire un champ de votre table Utilisateurs). Ce faisant, cela simplifie grandement la conception de votre base de données, vous permettant de conserver une normalisation saine et évite d'avoir à introduire une duplication non normalisée dans la conception (c'est-à-dire A ayant une table "utilisateurs non enregistrés" Je considérerais que la table des utilisateurs enregistrés est la duplication et complique la conception et les relations de vos entités de base de données.

En outre, l'option 1 rend votre code beaucoup plus simple lorsqu'un utilisateur non inscrit souhaite devenir un utilisateur enregistré. Cela devient simplement le réglage de quelques champs sur l'enregistrement de l'utilisateur.En supposant que votre relation de base de données aura un champ UserID (en tant que clé étrangère) sur votre table "Posts" relative à la clé primaire UserID sur votre table Users (ou une telle conception), vous devez faire lorsqu'un utilisateur non enregistré devient un inscrit utilisateur, alors qu'avec vos autres options, vous devez soit supprimer (effacer) les champs de messages potentiellement nombreux (option 3), ou supprimer et recréer des enregistrements dans plusieurs tables (option 2).

(en supposant, bien sûr, que vous ne souhaitez pas conserver le fait que l'utilisateur n'était pas enregistré quand un post précédent a été fait!)

+0

Ils ne sont pas enregistrés si .... "avoir une obligation d'autoriser les messages des visiteurs non enregistrés." – BIDeveloper

+0

Enregistré ou Non enregistré - ce sont des utilisateurs et leur maison naturelle est la table Utilisateurs. –

+0

@Jim - Oui, mais même les utilisateurs non enregistrés ont certaines informations à leur sujet (Alias, EMail, URL). À moins que vous ne vouliez dupliquer ceci sur chaque publication faite par le même utilisateur non enregistré, la meilleure chose à faire est de le stocker dans la table Users et d'avoir un "flag" indiquant si un enregistrement donné dans la table Users est un utilisateur enregistré ou non. . – CraigTP

0

Demandez à un utilisateur nommé « non enregistré » (ou quelque chose comme ça) dans la table des utilisateurs et que ce compte possède des posts anonymes.

En réponse au commentaire de CraigRP ci-dessous:

Je soit demander un nom dans une zone de texte et l'attacher au fond du poste comme une signature. Ou ne se soucierait pas de se différencier du tout. Après tout, anonyme est anonyme.

+0

C'est une solution, mais il est très difficile de faire la différence entre plusieurs utilisateurs non enregistrés/anonymes. – CraigTP

0

Je pense que cela est la même chose que votre option3:

Le tableau des messages consisterait

UserID (annulable) UnregisteredUserID (annulable)

puis le reste de vos champs.

Un ID utilisateur ou un ID non enregistré est renseigné.

À moins que vous n'ayez une page «enregistrer un nouvel utilisateur», il est inutile d'ajouter l'utilisateur à la table des utilisateurs.

Questions connexes