2009-10-20 167 views
2

我正在ASP.NET MVC中创建一个讨论论坛(各种),并且我有一个要求允许未注册的访问者发布帖子。访客只需要指定要发布的别名,并可以选择提供电子邮件地址和网站网址。数据库中的未注册用户

处理数据库中未注册用户的帖子的最佳做法是什么?

我有点在数据库设计一个新手,但这些方案浮现在脑海中:

  1. 插入新的用户表中的每个岗位未登记的访客记录。 (当Posts和Users表中的记录将具有1对1关系时,会使查询更容易,但会扩大Users表)
  2. 为未注册的用户创建新表,并为新的别名 - 电子邮件 - 网址组合创建新条目,重复使用现有的。 (在这种情况下,我将在Posts表中为RegisteredUserId和UnregisteredUserId有两个外键吗?)
  3. 直接将UnregisteredAlias,UnregisteredEmail和UnregisteredUrl字段添加到Posts表中。 (非常非规范化,但是这又对我来说似乎是一个干净的解决方案。然后,我会使Posts表的UserId字段为空,并将它设置为null(对于这些帖子))。
  4. 我还没有想到的显而易见的解决方案?

这些解决方案是否会导致映射LINQ To SQL时出现问题?

编辑:

为了澄清,我需要存储一个别名(名称),以及可选的电子邮件地址和网址由未注册访问者执行每个岗位。此信息与帖子一起显示,因此在这种情况下访客!=匿名。

回答

2

我会用开箱的Membershiphipsystem的ASP.NET。您可以选择允许匿名用户在那里。一旦他们创建了登录,他们的账户属性就会被迁移。

未注册的用户需要一个属性“UserName”。这只会用于显示用户名。他们将通过匿名用户ID进行标识。

0

别名的问题在于,如果没有用户注册的形式,另一个用户将能够使用相同的别名发布,从而“接管”他的身份。

我想我可以在用户表或用户和帖子之间的1-1映射中设置UserId,并添加第二个表来保存未注册用户的Email/Url /(别名)。

1

就我个人而言,我会选择1,“由未注册的访问者在每个帖子的用户表中插入新记录。”

为什么?那么,用户是一个用户,对吧?他们在您的网站上有注册的事实成为该用户的财产(即您的用户表中的一个字段)。

这样做大大简化了您的数据库设计,使您可以保持一个标准化的正常数量,并避免您必须在设计中引入非标准化的重复(即A有一个“未注册的用户”表和一个“注册用户“表我认为是重复和过度复杂的数据库实体的设计和关系)。

此外,选项1使您的代码更简单,因为未注册的用户希望成为注册用户时。这仅仅是用户记录中几个字段的设置。假设你的数据库关系在用户表(或某些此类设计)上与用户ID主键相关的“Posts”表上有一个UserID字段(作为外键)nothing当一个未注册用户成为注册时用户,而使用其他选项时,您需要从潜在众多以前的帖子(选项3)中删除(空白)字段,或删除并重新创建多个表中的记录(选项2)。

(假设,当然,前提是你不希望保留的事实,用户是未注册的时候一些以前的帖子写了!)

+0

他们还没有注册,但.... “有一个要求允许未注册的访问者发布帖子。” – BIDeveloper 2009-10-20 11:42:51

+0

注册或未注册 - 他们是用户,他们的自然之家是用户表。 – 2009-10-20 12:07:25

+0

@Jim - 是的,但即使未注册的用户也有一些关于它们的信息(Alias,EMail,URL)。除非您想在同一个未注册用户的每篇文章中复制此内容,否则最好的办法是将其存储在Users表中,并且有一个“标志”,用于指示Users表中的给定记录是已注册用户还是未注册用户。 – CraigTP 2009-10-20 12:10:52

0

有一个用户名为“未注册”(或类似的东西)在你的用户表中,并有该帐户拥有匿名职位。

在回答下面CraigRP的评论:

我要么要求在一个文本框的名称和其连接到后像一个签名的底部。或者根本不在乎区分。毕竟,匿名是匿名的。

+0

这是一个解决方案,但却很难区分多个未注册/匿名用户。 – CraigTP 2009-10-20 12:12:05

0

我认为这是与您的选项3:

的职位表将包括

用户名(可以为null) UnregisteredUserID(可为空)

,然后你的领域的其余部分。

将填充UserID或Unregistered ID之一。

除非你有一个“注册新用户”页面,否则根本没有必要将用户添加到users表中。