有一个列的表有什么问题吗? (SQL Server)

时间:2009-04-21 20:18:40

标签: sql-server database-design

考虑以下情况:

表格:

  • 员工(EmpId(PK),姓名)
  • TeamMembers(TeamId(PK),EmpId(PK))
  • 项目(ProjId(PK),TeamId)

我真的想避免使用复合PK,但我看到问题的唯一方法是创建一个只有1列TeamId(PK)的Team表(我不想存储与团队相关的任何信息除了其成员)(编辑:如果我创建一个团队表,我会将TeamMeberId添加到TeamMembers表并使其成为PK)

当前设置的另一个问题是我无法在Project和TeamMebers表之间为TeamId设置关系

我应该只创建1列Team表吗?在这种情况下,最好的方法是什么?

修改

只是为了澄清事情,我想知道的关于那支球队的唯一事情是它的存在,没有任何其他信息

EDIT2

表新设计(它有什么问题吗?):

  • 员工(EmpId(PK),姓名)
  • 小组(TeamId(PK))
  • TeamMembers(TeamMemberId(PK),TeamId(FK),EmpId(FK))
  • 项目(ProjId(PK),TeamId(FK))

6 个答案:

答案 0 :(得分:5)

如果团队唯一感兴趣的事实是它存在,那么只有一列的Team表格没有任何问题:TeamId。它确保TeamMembersProject表的参照完整性。

但我不明白你对复合PK的反对意见。 TeamId表中的列EmpIdTeamMembers都是复合主键。

答案 1 :(得分:2)

这种情况没有任何问题。我会这样做的。

另一方面,您可以在团队表中保存其他信息,例如团队名称等。

答案 2 :(得分:1)

1列表没有任何问题。但是,您可能需要考虑Team表可能具有的其他属性。例如,团队名称?

对于项目与员工之间的关系,您只需通过TeamMembers表加入。

答案 3 :(得分:0)

EmpId真的需要成为TeamMembers表中的主键吗?你可以说每个团队都有很多员工,而且关系很好。

答案 4 :(得分:0)

由于看起来Project和TeamMembers之间存在一对一的关系(如果我错了,请纠正我)并且您不想存储有关团队的其他信息,那么它会不会更容易摆脱TeamMembers表并使用Project和Employee之间的多对多链接表

Employee (EmpId(PK), Name)
EmployeeProjects(EmpId(PK), ProjId(PK))
Project(ProjId(PK), <other project info>)

但要回答你原来的问题。拥有一个列表没有什么特别的错误。

答案 5 :(得分:0)

这就是我如何构建表格

  1. 员工(EmployeeId(PK),姓名)
  2. 团队(TeamID(PK))
  3. TeamMembers(TeamMembersID(PK),TeamId,EmployeeId)
  4. 项目(ProjectID(PK),TeamId)
  5. 我喜欢将PK作为表名,后缀为ID 这种约定确实会产生副作用,有时会创建看似冗余的主键(如TeamMembersID),​​但它会解决您的复合键问题。