gpt4 book ai didi

database - 设计组织结构

转载 作者:搜寻专家 更新时间:2023-10-30 23:08:04 25 4
gpt4 key购买 nike

这个问题是在面试中被问到的。设计一个组织结构,员工可以有直接报告和间接报告(即报告者的报告者)。设计应该是这样的,在单个查询中它应该能够检索直接或间接报告者或两者。

我建议,

Employee
----------
id
name

Reportee
------
emp_id FK
reportee_id FK
isDirect

面试官说乐观的方案是

Employee
-------
id
name
reporting_path like (a>b>c)

添加额外的表,占用更多空间,但查询执行速度会更快。我说由于字符串匹配,基于路径的方法很糟糕并且性能很差。

那么哪种方法是乐观的?

最佳答案

面试官的做法很愚蠢,因为它没有使用参照完整性。

对于纯粹的层级模型(一个员工不能向多个老板报告),那么这是最好的方法:

create table employees (
employee_id int primary key,
name varchar(whatever) not null,
supervisor_id int null references employees(employee_id)
);

insert into employees (employee_id, name, supervisor_id) values
(1, 'Big Boss Bill', null),
(2, 'Vice President Victor', 1),
(3, 'Underling Ulysses', 2),
(4, 'Subordinate Sam', 2);

然后您可以使用 Recursive Common Table Expressions查询报告。

这里有一些示例查询:

http://blog.databasepatterns.com/2014/02/trees-paths-recursive-cte-postgresql.html

关于database - 设计组织结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23862836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com