分层数据的表模式应该是什么?

时间:2012-09-29 13:10:07

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

我刚刚参加了一次面试,在那里我收到了一个问题,包括这个场景和一些样本数据:

ABCD的老大。 DEF的老大。 然后FGH的老大,即我们有分层数据。

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

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

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

我的回答是:

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

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

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

如果出现任何问题,那么请您告诉我上述情况应该是正确的架构吗?

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

有时,面试问题不是关于结构,而是关于你识别和解决需求中的歧义的能力。 (此外,并不是说它在这里必然相关,但是当大多数人指出什么并说“等级”时,如果你仔细观察,你会发现“网络”。)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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