2016-11-10 82 views
-1

只是好奇,如果我可以在3个不同的表中有相同的主键?我将创建一个Employee,FullTime和PartTime表。我想将EmployeeID作为所有主键3.任何想法?三个表中的主键

+0

为什么要创建3个不同的表?创建1并有一个员工类型,表明他们是否全职/兼职?对我来说,你会捕获相同的数据。或雇员类型表,如果有关于全部/部分时间您需要捕获的特定属性.. – xQbert

回答

3

您可以将主键EmployeeId放在名为Employees的表中。这将有共同的信息,例如聘用日期等。

然后,每个子表可以有一个EmployeeId既在表主键和一个外键引用Employees.EmployeeId。这是使用关系表实现一对一关系的一种方法。

不幸的是,除非你使用触发器,这种机制并不妨碍一个员工在另外两个表中,但这不是你问题的一部分。

+0

然后我将作为雇员的主要关键? – LindaS

+0

现在对我更有意义。我是新来的sql,只是不知道如何实现这些密钥。谢谢! – LindaS

+0

不需要触发器,只需对每个表及其键(pk/fk)使用emp类型, –

0

这听起来像你的设计是错误的。

实体是雇员

雇员的属性是他们[当前^]就业状况。

因此,最简单的形式是,您需要一个员工表,其中有一列表明他们的状态。

为了进一步改善这一点,员工状态列应该与另一个存储可能的员工状态的表具有外键关系。

^当前状态是1:1的关系。如果你想要改变历史,这是一个1:M,需要不同的建模。