3

问题: 如果他们具有包含在文档中的角色,我如何使用下面的架构来获取尚未在文档上签名的用户列表?

背景:

我有一个用户表。用户具有角色。这是一个简单的设置:

Role table:           Role_ID | Name
User table:           User_ID | Name
Users_Roles table:    User_ID | Role_ID

现在我需要添加一个 Documents 表:

Documents table:  Document_ID | Name

我需要知道用户何时签署文档:

Documents_Users table: User_ID | Document_ID

到目前为止,它非常简单。

但现在变得很难了——我需要对文档添加限制,这样我就可以将文档分配给多个角色:

即 Document_ID 1 用于 Role_ID (3,4,5)。

我想我需要做

Documents_Roles table: Role_ID | Document_ID

但是 - 这是我不知道的难点:如果他们有一个包含在文档中的角色,我如何使用上面的模式来获取尚未在文档上签名的用户列表?

4

1 回答 1

1

你的结构是正确的

SELECT Users_Roles.User_ID, Documents_Roles.Document_ID
FROM Documents_Roles -- get some documents
-- JOIN Documents ON (Documents.Document_ID = Documents_Roles.Document_ID) -- if you need details from the Documents table
JOIN Users_Roles USING (Role_ID) -- get all users expected to sign them
-- JOIN Users ON (Users.User_ID = Users_Roles.User_ID) -- if you need details from the Users table
LEFT JOIN Documents_Users ON
    Documents_Users.Document_ID = Documents_Roles.Document_ID AND
    Documents_Users.User_ID = Users_Roles.User_ID -- find whether they have signed it
WHERE
    Documents_Users.User_ID IS NULL -- only those expected users who have *not* signed it
    -- AND Documents_Roles.Document_ID = some_id
;
于 2013-07-11T15:14:31.183 回答