我有一個表來保存用戶權利要求如下:(1):PK和唯一約束
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,類型=名稱,值=約翰
但我不能添加FOL降脂索賠:
UserAccountID = 1,類型=角色,值=編輯
UserAccountID = 1,類型=角色,值=編輯
我不能有兩排完全地相等。所有其他組合都是可能的。
我的想法是使用(2)。這與我以前做的事更接近......你怎麼看?
謝謝!
在這種情況下,UserClaims UserAccountID與作爲身份的Users表UserAccountID相同。所以當我得到一個用戶時,我也需要得到它的聲明。我永遠不會得到一個索賠本身。這就是爲什麼我使用UserAccountId ...所以我需要索引它使它成爲一個PK?或者唯一約束就足夠了? – 2013-04-29 11:47:19
@twoleggedhorse:恕我直言,你在這裏混淆理論和實現約束是一個**抽象的**數據模型概念,*可以*實現/強制執行索引(這是一個具體的*物理*事物)(它似乎是MS和mysql文檔也將它們混合起來) – wildplasser 2013-04-29 12:02:15