数据库设计 – 在新用户表中存储ASP.net成员资格和openid用户

为了存储使用OpenId登录用户用户信息,我计划创建用户表.

我的问题是这个新的用户表将包含我希望asp.net成员资格用户能够填写的新字段(配置文件数据).

我的计划是当用户想要用户名和密码时,他们注册并将信息插入到asp.net_Membership中,然后将他们的guid,username,createDate复制到新的用户表中,以便在代码中我可以只查找用户的数据表,如果他们在OpenId或asp.net会员注册,这无关紧要.

我想覆盖Membership.GetUser,以便它查找我的新用户表,我将添加web.config配置文件属性.

是否更好的性能而不是使用Membership.GetUser(我将调用新的User表):

User user = _repository.GetUser(userId);

我的应用程序已经在工作,我需要添加一些页面的引用来支持_repository,所以我只是考虑性能.

我计划创建一个新的用户表吗?我不喜欢复制的想法但是如果将来我想要更改用户名,那么更新新用户表和asp.net_Membership表并不麻烦.

我应该覆盖GetUser并在web.config添加配置文件属性还是调用我自己的User对象?

创建新的用户表并复制核心数据是最好的方法吗?

解决方法

创建一个将providerUserKey映射到用户的OpenID的新表.当用户使用其OpenID注册时,将OpenID添加到providerUserKey映射到此新表.当用户返回您的站点并使用其OpenID登录时,请从映射表中查找其providerUserKey.使用providerUserKey使用providerUserKey登录.

这种方法有许多优点.

>它允许用户注册并使用用户名/密码登录.
>它允许用户在其配置文件注册多个OpenID.
>映射表独立于其他成员资格API,因此您可以在不破坏提供程序的情况下以任何方式更改它.
>映射表可以像两列一样简单,在OpenID列上有索引.

您可以考虑散列用户的OpenID,将其转换为Guid,并存储Guid而不是完整的URL.这将使数据库列和&索引更小更快.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...