问题:如果用户的角色包含在文档中,则如何使用下面的架构获取未在文档上签名的用户列表?
背景:
我有一个用户表。用户具有角色。这是一个简单的设置:
Role table: Role_ID | Name
User table: User_ID | Name
Users_Roles table: User_ID | Role_ID
现在我需要添加一个文档表:
Documents table: Document_ID | Name
我需要知道用户何时在文档上签名:
Documents_Users table: User_ID | Document_ID
到目前为止还很简单。
但现在它变得困难了-我需要添加对文档的限制,以便可以将文档分配给多个角色:
即文档ID 1用于角色ID(3、4、5)。
我想我需要
Documents_Roles table: Role_ID | Document_ID
但是,有一点我不知道:如果用户的角色包含在文档中,那么我如何使用上面的模式来获取未在文档上签名的用户列表?
最佳答案
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
;
关于mysql - mySQL Schema设计建议,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17596378/