我怎样才能最好地代表关系数据库中的用户和他们向其报告的经理?
How can I best represent users and the managers they report to within a relational database?
例如,我们有User1, User2, and User3
。这三个用户中的每一个都向 Manager1
报告,后者又向 Boss1
报告。所有这些人都在 users
table 中,并且由 user_id
唯一标识。我们只需要跟踪 table.
中每个用户的当前经理
如何最好地执行?我提出这个问题是因为它本质上是对同一个 table 的引用,我犹豫要不要将 manager_id
列添加到 users
table 因为我们可能 运行 进入像 Boss1
这样的情况,他可能没有直接的经理(我想我们可以选择让这个边缘案例自我引用,例如将 Boss1
的经理设置为他自己)。
只是想在设计时获得一些思考。
假设您确定没有用户拥有超过一位管理员,您可以将 Boss1
的管理员设置为 null
。这会明确地表明他没有任何东西,并且会阻止一个简单地走上经理链的程序进入无限循环。
如果您不确定用户将永远只有一个管理员,并且您想满足这种情况,您可以创建一个新的user_manager
table 与列 user_id
和 manager_id
,每个都是 users
table 的外键并且都是主键的一部分。这样,拥有 2 个管理员的用户将在 table 中有两条记录,而 Boss1
将只具有 none,他是 user_id
。
例如,我们有User1, User2, and User3
。这三个用户中的每一个都向 Manager1
报告,后者又向 Boss1
报告。所有这些人都在 users
table 中,并且由 user_id
唯一标识。我们只需要跟踪 table.
如何最好地执行?我提出这个问题是因为它本质上是对同一个 table 的引用,我犹豫要不要将 manager_id
列添加到 users
table 因为我们可能 运行 进入像 Boss1
这样的情况,他可能没有直接的经理(我想我们可以选择让这个边缘案例自我引用,例如将 Boss1
的经理设置为他自己)。
只是想在设计时获得一些思考。
假设您确定没有用户拥有超过一位管理员,您可以将 Boss1
的管理员设置为 null
。这会明确地表明他没有任何东西,并且会阻止一个简单地走上经理链的程序进入无限循环。
如果您不确定用户将永远只有一个管理员,并且您想满足这种情况,您可以创建一个新的user_manager
table 与列 user_id
和 manager_id
,每个都是 users
table 的外键并且都是主键的一部分。这样,拥有 2 个管理员的用户将在 table 中有两条记录,而 Boss1
将只具有 none,他是 user_id
。