MVC 5,想要向userprofile添加电子邮件地址,我应该添加哪个表? userprofile或webpages_membership? (数据库设计)

时间:2015-08-01 05:10:17

标签: asp.net-mvc database database-design

我有一个新的MVC5网络应用程序,目前,默认情况下, table:userprofile 存储用户名和userId。

CREATE TABLE [dbo].[UserProfile] (
[UserId]            INT            IDENTITY (1, 1) NOT NULL,
[UserName]          NVARCHAR (MAX) NULL,
[FirstName]         VARCHAR (MAX)  NULL,
[LastName]          VARCHAR (MAX)  NULL,
PRIMARY KEY CLUSTERED ([UserId] ASC)
);

表:webpages_membership存储userpassword。

CREATE TABLE [dbo].[webpages_Membership] (
[UserId]                                  INT            NOT NULL,
[CreateDate]                              DATETIME       NULL,
[ConfirmationToken]                       NVARCHAR (128) NULL,
[IsConfirmed]                             BIT            DEFAULT ((0)) NULL,
[LastPasswordFailureDate]                 DATETIME       NULL,
[PasswordFailuresSinceLastSuccess]        INT            DEFAULT ((0)) NOT NULL,
[Password]                                NVARCHAR (128) NOT NULL,
[PasswordChangedDate]                     DATETIME       NULL,
[PasswordSalt]                            NVARCHAR (128) NOT NULL,
[PasswordVerificationToken]               NVARCHAR (128) NULL,
[PasswordVerificationTokenExpirationDate] DATETIME       NULL,
PRIMARY KEY CLUSTERED ([UserId] ASC)
);

我想将emailaddress和emailaddressConfirmed添加到表格中。我应该添加哪一个?或者构建一个包含所有内容的位表?

此外,我对会员资格和角色一无所知,我是否应该投入一些时间来了解它? (或者它只对深奥的东西有用吗?)

1 个答案:

答案 0 :(得分:1)

这在很大程度上取决于用例,但一般来说,最好将它添加到UserProfile表中。

如果您希望用户在他/她的电子邮件地址上使用CRUD,那么将电子邮件字段存储在UserProfile表中最好是出于各种原因。

  • 最小化数据库调用。在单个表中存储他具有(可能是各种级别的)CRUD访问权限的用户的所有属性允许您在获取/更新该特定用户的数据时访问您的数据库。
  • 模特优雅。在上面稍微切线,访问一个表,以获取将添加到模型(和/或视图模型)的所有属性传递给View,您的代码(C#或SQL中的SQL,取决于您放置逻辑的位置)将更优雅,更容易阅读,避免JOIN等。

其他很多原因,其中很多我完全不了解,但这两个原因最重要,最大限度地减少了电话和代码的干净。也有理由反对它:

  • 受保护的信息。您是否考虑在您的设置中发送电子邮件敏感信息?您域中是否有关于此信息的法律(E.G。:某些美国学校的电子邮件是通过FERPA保护的)?受保护的信息可能需要更改权限,以不安全的方式存储或以不合时宜的方式显示它们可能会使您处于合法范围内。

同样,各种用例和您的特定项目可能需要不同的设计,较小的独立项目可能需要一个设计,而大型企业项目可能需要更简化的设计和潜在的担忧,使其落入某个合法范围。

对于成员资格/角色,它们在企业级数据库设置中肯定是有用的,其中权限可能是必要的,但“你应该投入时间”太主观而不能真正回答。