如何在sqlServer中创建复杂表?

时间:2010-10-31 14:03:10

标签: sql primary-key

假设我有一个名为Employees的表,每个员工都有一个名为(E_ID)的主键 我有另一个名为Positions的表,每个Position都有一个名为(P_ID)的主键 我还有另一个名为office的表,每个办公室都有一个名为(O_ID)的ID

现在我要创建一个包含三个primaryKeys的表:(E_ID)和(P_ID)和(O_ID)... 当然,这三个值必须从前三个表中退出,但我还是无法做到这一点? 请帮助我,因为我很糟糕 非常感谢

1 个答案:

答案 0 :(得分:0)

如果是我,我想我只是向员工添加P_ID和O_ID。多个员工可以填写相同的职位,并且在给定的办公室中可能有多个员工,但是不太可能(不使用克隆技术)需要多次复制相同的员工 - 因此,只需添加P_ID和O_ID即可员工和我认为你很高兴。当然,您需要从Employee到Position(P_ID)和Office(O_ID)的外键约束。

编辑:经过一番思考,并回忆起我已经在我填补了多个职位的工作(尽管在同一地点),我想可以想象一个人可能已经填满了可能位于不同位置的多个职位。

如果您确实在Employees,Positions和Offices之间设置了联结表 - 那么,创建一个名为EmployeePositionOffice(或类似的东西)的表,其中包含三列E_ID,P_ID和O_ID。主键应该是(E_ID,P_ID,O_ID),并且每个字段应该是外键到相关的基表。

编辑: 不确定SQL Server语法,但在Oracle中,第一个类似于:

ALTER TABLE EMPLOYEES
  ADD (P_ID NUMBER REFERENCES POSITIONS(P_ID),
       O_ID NUMBER REFERENCES OFFICES(O_ID));

而第二个就像是

CREATE TABLE EMPLOYEES_POSISTIONS_OFFICES
  (E_ID  NUMBER REFERENCES EMPLOYEES(E_ID),
   P_ID  NUMBER REFERENCES POSITIONS(P_ID),
   O_ID  NUMBER REFERENCES OFFICES(O_ID),
   PRIMARY KEY (E_ID, P_ID, O_ID));

分享并享受。