我认为问题的典型形式是你有员工,员工有经理,所以经理有经理,除非他是 CEO。
那么如何存储数据呢?解决方案 1:似乎员工表可以有 manager_id 或者您可以有一个employee_manager 表(这样您可以有多个或零个经理)。
有些人说解决方案 1 是个坏主意,因为 SQL 不支持递归,并且没有查询可以找到员工之上的所有经理。这些人有不同的想法(比如员工有一份经理名单),但他们似乎都包含一堆非常难以维护的非标准化数据。
那么大家觉得呢?
最佳答案
我同意其他人的观点。递归可用。
我不会将 manager_id 放在 emp 表中(尽管有 SCOTT/TIGER 古老的智慧)。现实世界无时无刻不在打破这个商业规则,而且没有很好的规范化。
请考虑一个 person_to_person 类型的链接表,其中两个人在某个时间段内以某个角色相互关联...例如,从 1 月到 3 月,person1 与 person2 作为经理相关。这使您可以非常灵活地将人员分配到项目、部门、任意组,即使在某些时间点有多个经理也是如此。
还要考虑人员与部门的关系是相似的——人们可能同时与多个部门以微妙的方式相关。
关于sql - 在数据库中存储树数据的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7959877/