为公司树选择正确的数据结构

时间:2016-02-02 07:46:38

标签: c# .net

我在为工作中的一个问题确定正确的数据结构时遇到了一些问题。我要做的是创建一个“公司结构树”。简而言之 - 有人是所有老板的老板(所以他是树的第一级(或零级))然后还有其他工人,但是如你所知,有人可能是别人老板等等。树必须最多5级。即使从数据库的角度来看,我也不知道如何创建它。

我已经尝试过自定义ViewModels和一些字典,但我觉得这有一种有效的方法,不包括5级嵌套字典或列表。

如果有人知道如何做到这一点,我们将非常感谢任何帮助。

干杯。

4 个答案:

答案 0 :(得分:2)

我建议你在Employees表上使用自引用外键

Employees

| ID    | Name  | ManagerID |
|-------|-------|-----------|
| 1     | Tom   | NULL      |
| 2     | Andy  | 1         |
| 3     | Heidi | 2         |

其中ManagerID是ID上的外键。

优点:

  • 您不限于5个级别
  • 您可以拥有多个根条目
  • 这个原则也适用于菜单树等其他自引用结构。
  • 如果您需要n:n连接,您可以非常规化(只需以分号分隔ManagerID的每个字段1; 2)或使用自己的交叉表进行规范化,这很容易扩展。

答案 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中执行此操作会非常快。