【问题标题】:What should be the table schema for hierarchical data?分层数据的表模式应该是什么?
【发布时间】:2012-09-21 02:28:14
【问题描述】:

我刚刚参加了一次面试,我收到了一个问题,包括这个场景和一些示例数据:

ABCD 的老板。 DEF 的老板。 那么FGH的boss,即我们有分层数据。

换句话说,我们可以说有项目经理、团队负责人然后是开发人员。现在我们要创建表来存储数据。

此外,开发人员以后可以成为项目经理。

那么我们应该如何创建表呢?表格应该包含哪些列?

我的回答是:

我们应该有一个项目经理表,其中包含PM_IDPM_Name 列,其中PM_ID 是主键。然后我们应该为团队领导创建另一个表。在该表中,我们应该有 TL_ID 作为主键,TL_NamePM_ID 作为外键。

然后我们应该创建开发人员表,我们应该有D_ID 作为主键,D_Name,然后TL_ID 作为外键。

您能否告诉我是否为该表提供了正确的架构?

如果有任何问题,您能否向我提供上述情况的正确架构?

【问题讨论】:

  • 为不同角色设置单独的表的问题是您需要在角色更改时添加表。像 CTE 和“under”查询这样的查询也更难。有很多方法,但所有方法都使用一个表。
  • 问题没有明确说明。层次结构是否将员工与其他员工相关联(Joe 向 Fred 报告)在一个将工作槽与其他工作槽相关联(团队 X1 的团队负责人向项目 x 的项目经理报告)?如果是前者,那么一些答案会将您指向一个名为“Adjacency List”的单表解决方案。

标签: c# sql-server database-design hierarchical-data


【解决方案1】:

您很可能需要一个层次结构表 http://msdn.microsoft.com/en-us/library/bb677174%28v=sql.100%29.aspx,然后使用 cte 查询来显示结果。

【讨论】:

    【解决方案2】:
    • 当开发人员成为项目经理时,此人是否不再是开发人员?
    • 所有这些关系都会随着时间而改变。您是否需要知道哪些关系发生了变化,以及何时发生了变化?
    • 每个人都必须有老板吗?
    • 每个老板都必须有下属吗?
    • 当老板去世或离开时,该老板的下属会怎样?
    • 开发人员可以同时为多个团队负责人工作吗?

    有时,面试问题与结构无关,而更多地与您识别和解决需求歧义的能力有关。 (另外,这里不一定相关,但是当大多数人指着某物说“层次结构”时,如果你仔细观察就会发现“网络”。)

    【讨论】:

      【解决方案3】:

      在这种情况下,您的表需要有一个外键。

      【讨论】:

      【解决方案4】:

      我认为最简单的表格将包含这些信息(仅在一个表格中):

      EmployeeID | LineManager | Role
      -----------+-------------+-----
      A          | A           | boss
      B          | A           | pm
      C          | A           | pm
      D          | A           | pm
      E          | D           | tl
      F          | D           | tl
      G          | F           | dev
      H          | F           | dev
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-21
        • 2018-08-01
        • 2021-07-16
        • 1970-01-01
        • 2011-03-01
        • 1970-01-01
        • 2019-09-23
        相关资源
        最近更新 更多