1

10列のテーブルがありますが、これには3列しかありません。テーブルが次のようになっていると想像してください。

CREATE TABLE MyTable ( RowID int IDENTITY(1,1), UserID int, NodeID int, RoleID int )

私が必要としているのは、次のことを強制する制約です: UserID と RoleID は NodeID ごとに一意である必要があります (つまり、ユーザーは複数のノードで同じロールを持つことはできません)。つまり許可したい

INSERT MyTable (UserID, NodeID, RoleID) SELECT 1, 1, 1

しかし許さない

INSERT MyTable (UserID, NodeID, RoleID) SELECT 1, 2, 1

最初の挿入が発生した場合は、ユーザーが複数のノードでロールを持つことになるためです。

うまくいけば、これは単純で、頭の中で必要以上に複雑にしているだけです。

4

2 に答える 2

1

一意のインデックスは、要件を強制する必要があります

CREATE UNIQUE NONCLUSTERED INDEX [idx_Unique] ON [dbo].[MyTable] 
(
    [UserID] ASC,
    [NodeID] ASC,
    [RoleID] ASC
)

コメントから、2つの一意のインデックスが必要になると思います

CREATE UNIQUE NONCLUSTERED INDEX [idx_User_Node] ON [dbo].[MyTable] 
(
    [UserID] ASC,
    [NodeID] ASC
)
GO
CREATE UNIQUE NONCLUSTERED INDEX [idx_User_Role] ON [dbo].[MyTable] 
(
    [UserID] ASC,
    [RoleID] ASC
)
于 2013-05-29T22:08:04.683 に答える