我有一个表格来保存用户声明,如下所示(1):
CREATE TABLE [dbo].[UserClaims] (
[UserAccountID] [int] NOT NULL,
[Type] [nvarchar](150) NOT NULL,
[Value] [nvarchar](150) NOT NULL,
CONSTRAINT [PK_dbo.UserClaims] PRIMARY KEY ([UserAccountID], [Type], [Value])
)
对于同一张表(2),我还有第二个选项:
CREATE TABLE [dbo].[UserClaims] (
[UserAccountID] [int] NOT NULL,
CONSTRAINT PK_UserClaims_UserAccountId PRIMARY KEY CLUSTERED (UserAccountId),
[Type] [nvarchar](150) NOT NULL,
[Value] [nvarchar](150) NOT NULL,
CONSTRAINT UQ_UserClaims_Value_Type_UserAccountID unique (Value, [Type], UserAccountID)
)
我有桌子:
CREATE TABLE [dbo].[UsersAccounts] (
[UserAccountID] [int] IDENTITY NOT NULL,
CONSTRAINT PK_UsersAccounts_UserAccountId PRIMARY KEY CLUSTERED (UserAccountId)
)
当我得到一个用户时,我总是需要从 UserClaims 获得它的所有声明。
UserAccountID 足以识别所有用户声明...
在选项 (2) 中,UserAccountID 既是 PK 又是 FK。
我需要能够将以下行添加到 UserClaims:
UserAccountID = 2,类型 = 角色,值 = 编辑器
UserAccountID = 1,类型 = 角色,值 = 编辑器
UserAccountID = 1,类型 = 角色,值 = 成员
UserAccountID = 1,类型 = 名称,值 = John
但我不能添加以下声明:
UserAccountID = 1,类型 = 角色,值 = 编辑器
UserAccountID = 1,类型 = 角色,值 = 编辑器
我不能让两行完全相等。所有其他组合都是可能的。
我的想法是使用(2)。它更接近我习惯做的事情......你怎么看?
谢谢你!