Question

I'm planning a system where users will be stored in a Nested Set Hierarchy of groups (e.g. Board Members, Regions, Divisions, Teams), that will be used to determine what level of data they can see. I need to plan for the Hierarchy to contain potentially thousands of users.

Data to be reported on is stored in a SQL Server 2008 database, with each applicable record linked to the ID of the user who performed that action (e.g., a telephone call)

I'll need to query the database to gather totals that apply to either an individual user, or, a collection of users from the Hierarchy (e.g., Gather the count of all Calls made for a day by members of Division X, or, all calls made across the entire Company).

Assuming the following query:

    SELECT Count(Id) FROM Calls 
    JOIN
    (
        SELECT Heirarchy.UserId 
        FROM Heirarchy
        {nested set joins}
        WHERE {nested set conditions to get relevant UserIds}
    ) H1
    ON Calls.UserId = H1.UserId 
    WHERE {conditions}

As the hierarchy will contain thousands of users, if a Top Level group user (e.g., a Board Member) runs the above query, all user records will be returned by the sub query and matched on.

1) Is this the correct approach to model such a system?

2) Can anyone see any issues and if so, suggest improvements?

3) Can anyone suggest alternative methods to achieve the above?

Was it helpful?

Solution

This approach worked fine - system's been live since Jan '13 with no issues.

Still interested if anyone has an alternative

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top