我在为工作中的一个问题确定正确的数据结构时遇到了一些问题。我要做的是创建一个“公司结构树”。简而言之 - 有人是所有老板的老板(所以他是树的第一级(或零级))然后还有其他工人,但是如你所知,有人可能是别人老板等等。树必须最多5级。即使从数据库的角度来看,我也不知道如何创建它。
我已经尝试过自定义ViewModels和一些字典,但我觉得这有一种有效的方法,不包括5级嵌套字典或列表。
如果有人知道如何做到这一点,我们将非常感谢任何帮助。
干杯。
答案 0 :(得分:2)
我建议你在Employees表上使用自引用外键
Employees
| ID | Name | ManagerID |
|-------|-------|-----------|
| 1 | Tom | NULL |
| 2 | Andy | 1 |
| 3 | Heidi | 2 |
其中ManagerID是ID上的外键。
优点:
答案 1 :(得分:1)
这个结构怎么样:
CREATE TABLE Employee (
[Id] NOT NULL IDENTITY(1,1) PRIMARY KEY,
[Name] VARCHAR(250),
...
[Supervisor] INT NULL FOREIGN KEY REFERENCES Employee([Id])
)
Nullable supervisor意味着,这是树的根。从C#
角度来看,这可以用Composite Pattern
表示 - 对象包含共享相同接口的对象列表(在我们的例子中是精确类型)。
答案 2 :(得分:0)
在数据库端Common Table Expression (CTE)是您所需要的。另请查看this。
在UI方面,您可以使用D3 tree。注意D3有一个学习曲线,但它的价值。请选择look at this。
答案 3 :(得分:0)
这是一个简单的json结构。我知道你正在处理c#但是在mongodb或其他一些nosql中执行此操作会非常快。