将复杂数据加入ASP.Net成员资格表的最佳数据库设计方法

时间:2010-02-26 12:18:48

标签: asp.net sql-server database-design asp.net-membership

我希望使用略微修改的ASP.Net成员资格提供程序来处理网站中的标准用户帐户创建/身份验证/等。我们需要迁移大量遗留数据,以便与现有用户保存的信息(如订单历史记录,心愿单等)保持连续性。 [注意:无论如何我们必须迁移,所以这不是我们迁移数据的原因]

我想知道将这些额外数据加入asp.net成员资格表是一种明智的方法。我可以在用户表上使用两个唯一的密钥 - UserId或电子邮件 - 我们将用它作为用户名的代理。

我的问题是,在我的表格中用于存储订单,愿望清单等的更好的访问模式(以及外键)是什么?

在HttpContext中,可以使用包含“用户名”的用户对象,我们的电子邮件地址, 但是没有可用的userId Guid。

我看到3个选项:

  1. 我想简单地使用uniqueidentifier UserId来提高对冗长的varchar电子邮件地址的访问效率,但是如果没有额外的数据库调用来通过电子邮件/登录获取它,它似乎不容易获得。有没有办法获取UserId所以我可以把它作为不同表上的外键?
  2. 我可以传入电子邮件地址(用户名)作为输入参数,加入userId,电子邮件地址= @emailAddress,并使用userId作为其他表的外键。
  3. 不可行

    1. 我可以将所有其他表上的用户名/电子邮件地址存储为外键 - 这将是一个不幸的非规范化
    2. 从数据库角度或从应用程序效率角度对最佳方法的任何想法?

1 个答案:

答案 0 :(得分:3)

您可以获得UserId:

MembershipUser myObject = Membership.GetUser();
        string UserID = myObject.ProviderUserKey.ToString();

或者(请检查)

  string userId = Membership.GetUser(User.Identity.Name).ProviderUserKey.ToString();