我有一个使用标准Role,User和UserRoleJoin架构的应用程序。
应用程序需要根据用户所处的角色组向用户发送报告。例如
角色:
ID Name
1 Lead
2 Mech
3 Elec
4 Auditor
5 Assigner
的UserRole :
UserID RoleID
1 1
1 2
1 4
2 1
2 4
我希望能够向所有潜在客户,机甲和审核员用户发送一份报告,或者向所有潜在客户和审核员用户发送不同的报告。
第一份报告只会发送给用户1,而第二份报告会发送给用户2
我是否应该使用不同的表来处理报告关联的角色,还是应该通过选择查询处理这些组?
答案 0 :(得分:1)
有几种方法。我倾向于使用group by
和having
:
select ur.UserId
from UserRole ur join
Role r
on ur.RoleID = r.Id
where name in ('Leads', 'Mech', 'Auditors')
group by ur.UserId
having count(*) = 3;
这种方法的优点是逻辑全部在having
子句中。您可以使其更加灵活,例如所有非审计员的潜在客户和机会。
答案 1 :(得分:1)
如果这些群体足够稳定,他们应该有办法将其保留在数据库中,Group(ID PK, Name)
,RoleGroup(GroupID , RoleID)
declare @grpName varchar(50) = 'my_group';
select ur.UserId
from UserRole ur
join RoleGroup rg on rg.RoleID = ur.RoleID
join Group g on rg.GroupID = g.ID and g.Name = @grpName
group by ur.UserId
having count(*) = (select count(*) n
from RoleGroup rg
join Group g on rg.GroupId = g.ID and g.Name = @grpName);