2012-09-15 53 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表。

相關問題