2012-09-15 52 views
-2

外键我有两个表名为EMPLOYEE和DEPARTMENT如下:关于一个表的主键作为另一个表

CREATE table "EMPLOYEE" (
    "EMP_ID"  NUMBER, 
    "ENAME"  VARCHAR2(4000), 
    "SALARY"  VARCHAR2(4000), 
    "COMPANY" VARCHAR2(4000), 
    "CONTACTNO." NUMBER, 
    "GENDER"  CHAR(100), 
    constraint "EMPLOYEE_PK" primary key ("EMP_ID") 
) 

CREATE TABLE "DEPARTMENT" 
( 
    "DEPT_ID" NUMBER, 
    "DEPT_NAME" VARCHAR2(4000), 
    "LOCATION" VARCHAR2(4000), 
    "CONTACTNO." NUMBER, 
    CONSTRAINT "DEPARTMENT_PK" PRIMARY KEY ("DEPT_ID") ENABLE 
) 

现在我试图让EMPLOYEE表的EMP_ID作为主键EMPLOYEE表本身,但它应该作为DEPARTMENT表中的DEPT_ID的外键,请告知如何实现这一点!

+3

大概这是一个化妆的例子吧?在EMPLOYEE中的EMP_ID列与DEPARTMENT中的DEPT_ID列之间存在外键关系是没有意义的。如果你真的有这两个表,你会想添加一个'DEPT_ID'列到'EMPLOYEE',它引用'DEPARTMENT'的'DEPT_ID'。假设这是一个虚构的例子,你是否希望'EMPLOYEE'成为外键关系中的父表或子表? –

+0

为什么你不应该在员工表中拥有department_id? – gks

+0

@JustinCave Employee是父表,它应该引用为DEPARTMENT表 –

回答

1

我希望这能帮助你

CREATE table "EMPLOYEE" (
"EMP_ID"  NUMBER, 
"ENAME"  VARCHAR2(4000), 
"SALARY"  VARCHAR2(4000), 
"COMPANY" VARCHAR2(4000), 
"Dept_id" NUMBER, 
"CONTACTNO." NUMBER, 
"GENDER"  CHAR(100), 
constraint "EMPLOYEE_PK" primary key ("EMP_ID"), 
CONSTRAINT fk_DeptId FOREIGN KEY (Dept_Id) 
REFERENCES Department("Dept_Id") 
); 
+0

非常感谢您的支持,但是却得到了这个错误.. ORA-00907:右括号..upon在Oracle 10g Express Edition上执行 –

+0

@Rocky Sinha现在找到它了,我错过了它的约束条件,它应该工作正常 – gks

+2

它不会正常工作。你在引用所有内容......你应该尽可能避免这种情况:'Dept_Id == DEPT_ID!=“Dept_Id”' – Ben

-1
CREATE table "EMPLOYEE" (
    "EMP_ID"  NUMBER, 
    "ENAME"  VARCHAR2(4000), 
    "SALARY"  VARCHAR2(4000), 
    "COMPANY" VARCHAR2(4000), 
    "CONTACTNO" NUMBER, 
    "GENDER"  CHAR(100), 
    constraint "EMPLOYEE_PK" primary key ("EMP_ID") 
) 


ALTER TABLE "EMPLOYEE" ADD CONSTRAINT "EMPLOYEE_FK" 
FOREIGN KEY ("EMP_ID") 
REFERENCES "DEPARTMENT" ("DEPT_ID") 
+1

我认为EMP_ID引用DEPT_ID并不合理。 –

+0

尽管可以创建一个约束条件,要求EMPLOYEE.EMP_ID列包含DEPARTMENT.DEPT_ID列中存在的值,但在我看来,这基本上是不正确的。换句话说,“员工的ID必须等于部门的ID”。鉴于EMP_ID是EMPLOYEE的主键,这意味着每个员工必须存在于其自己的部门中,部门和员工实际上是同义词。 –

2

如果EMPLOYEE是要父表和DEPARTMENT是要子表,外键将需要在DEPARTMENT定义它引用EMPLOYEE表中的EMP_ID。外键在子表上创建并引用父表。

CREATE TABLE "DEPARTMENT" 
( 
    "DEPT_ID" NUMBER, 
    "DEPT_NAME" VARCHAR2(4000), 
    "LOCATION" VARCHAR2(4000), 
    "CONTACTNO." NUMBER, 
    CONSTRAINT "DEPARTMENT_PK" PRIMARY KEY ("DEPT_ID") ENABLE, 
    CONSTRAINT department_fk FOREIGN KEY(DEPT_ID) 
     REFERENCES employee(EMP_ID) 
) 

当然,鉴于你例如,定义外键约束是完全不正确的方法来对数据建模。这组有效的部门标识受员工标识组限制是没有意义的。通过这种方式定义外键还可以防止部门拥有超过1名员工。如果您真的是建模部门和员工,则需要将DEPT_ID列添加到EMPLOYEE表中,EMPLOYEE表将是子级而不是父级,并且将在EMPLOYEE表上定义外键以引用DEPARTMENT表。

相关问题