我有以下表格:
|学生|
|工作|
|申请|
我应该在Application表中删除ApplicationID并使用JobID和StudentID作为复合主键,还是应该将这些作为外键并使用ApplicationID作为主键?
注意:如果它有所作为,我会应用约束,例如学生只能接受一个申请,在提出接受申请后3周等。
由于
答案 0 :(得分:1)
从理论的角度来看,ApplicationID
主键在这个阶段似乎是多余的(假设只有这3个表),因此您可能会想要删除它并切换到更自然的复合主键(StudentID, JobID)
。
但是,有两个强有力的实际反驳论点。
您的数据结构可能超出这3个表,并且在某些时候Application
表本身可以从其他地方引用。这意味着引用该表的每个外键也应该是复合的,由StudentID
和JobID
组合,无处不在组成。
SQL层之外的每个应用程序都应根据此复合主键映射到Application
表,以便查看/编辑或删除其中的条目。
根据您的具体情况,您可以自行决定上述2点的强度。如果引用Application
表的概率趋于0并且您不打算通过上层软件来管理它,那么复合主键就是可行的方法。在所有其他情况下,我会选择只有一个主键ApplicationID
,并且对(StudentID, JobID)
有一个额外的唯一约束。