sql - 在数据库中存储树数据的最佳实践

标签 sql tree-structure

我认为问题的典型形式是你有员工,员工有经理,所以经理有经理,除非他是 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/

相关文章:

mysql - 结果从 MySQL 查询返回两次

sql - 在具有许多关系的表中删除 100 万行的最佳方法

mysql - SQL 使用不同的参数或值更新多条记录

javascript - 使用 JSON 构建层次结构树

javascript - 动态 Javascript 树结构

scikit-learn - 如何使用 scikit-learn 从决策树中获取区间限制?

php - SELECT(MAX) SQL 到 Eloquent,无需原始数据

MongoDB 递归查找查询

javascript - 无法读取属性 "match"(nestedSortable)

sql - UML转SQL工具