考虑以下情况:
表格:
我真的想避免使用复合PK,但我看到问题的唯一方法是创建一个只有1列TeamId(PK)的Team表(我不想存储与团队相关的任何信息除了其成员)(编辑:如果我创建一个团队表,我会将TeamMeberId添加到TeamMembers表并使其成为PK)
当前设置的另一个问题是我无法在Project和TeamMebers表之间为TeamId设置关系
我应该只创建1列Team表吗?在这种情况下,最好的方法是什么?
只是为了澄清事情,我想知道的关于那支球队的唯一事情是它的存在,没有任何其他信息
表新设计(它有什么问题吗?):
答案 0 :(得分:5)
如果团队唯一感兴趣的事实是它存在,那么只有一列的Team
表格没有任何问题:TeamId
。它确保TeamMembers
和Project
表的参照完整性。
但我不明白你对复合PK的反对意见。 TeamId
表中的列EmpId
和TeamMembers
都是复合主键。
答案 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)
这就是我如何构建表格
我喜欢将PK作为表名,后缀为ID 这种约定确实会产生副作用,有时会创建看似冗余的主键(如TeamMembersID),但它会解决您的复合键问题。