2014-10-27 152 views
0
CREATE TABLE EMPLOYEE 
(Fname VARCHAR(15) NOT NULL, 
Minit CHAR, 
Lname VARCHAR(15) NOT NULL, 
Ssn CHAR(9) NOT NULL, 
Bdate DATE, 
Address VARCHAR(30), 
Sex CHAR, 
Salary DECIMAL(10,2), 
Super_ssn CHAR(9), 
Dno INT NOT NULL, 
PRIMARY KEY (Ssn), 
FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn), 
FOREIGN KEY (Dno) REFERENCES DEPARTMENT(Dnumber)); 

CREATE TABLE DEPARTMENT 
(Dname VARCHAR(15) NOT NULL, 
Dnumber INT NOT NULL, 
Mgr_ssn CHAR(9) NOT NULL, 
Mgr_start_date DATE, 
PRIMARY KEY (Dnumber), 
UNIQUE (Dname), 
FOREIGN KEY (Mgr_ssn) REFERENCES EMPLOYEE(Ssn)); 

CREATE TABLE DEPT_LOCATIONS 
(Dnumber INT NOT NULL, 
Dlocation VARCHAR(15) NOT NULL, 
PRIMARY KEY (Dnumber, Dlocation), 
FOREIGN KEY (Dnumber) REFERENCES DEPARTMENT(Dnumber)); 

CREATE TABLE PROJECT 
(Pname VARCHAR(15) NOT NULL, 
Pnumber INT NOT NULL, 
Plocation VARCHAR(15), 
Dnum INT NOT NULL, 
PRIMARY KEY (Pnumber), 
UNIQUE (Pname), 
FOREIGN KEY (Dnum) REFERENCES DEPARTMENT(Dnumber)); 

CREATE TABLE WORKS_ON 
(Essn CHAR(9) NOT NULL, 
Pno INT NOT NULL, 
Hours DECIMAL(3,1) NOT NULL, 
PRIMARY KEY (Essn, Pno), 
FOREIGN KEY (Essn) REFERENCES EMPLOYEE(Ssn), 
FOREIGN KEY (Pno) REFERENCES PROJECT(Pnumber)); 

CREATE TABLE DEPENDENT 
(Essn CHAR(9) NOT NULL, 
Dependent_name VARCHAR(15) NOT NULL, 
Sex CHAR, 
Bdate DATE, 
Relationship VARCHAR(8), 
PRIMARY KEY (Essn, Dependent_name), 
FOREIGN KEY (Essn) REFERENCES EMPLOYEE(Ssn)); 

這裏我不能夠創建任何表,因爲每個表使用外鍵constraint.So好心幫我如何創建整個database.for如引用到其他表。如果我正在創建EMPLOYEE表,它正在搜索DEPARTMENT表並且不允許創建該表,並且正在嘗試創建DEPARTMENT,然後它再次搜索EMPLOYEE表時不允許創建該表。創建一個數據庫

+0

首先創建所有的表,之後添加約束 – 2014-10-27 09:59:17

回答

1

您可以嘗試創建並填充沒有外鍵約束的表,然後添加外鍵約束。

1

只需在創建表時添加外鍵,例如,

ALTER TABLE EMPLOYEE ADD CONSTRAINT FK_EMPLOYEE_DEPARTMENT 
    FOREIGN KEY (Dno) REFERENCES DEPARTMENT(Dnumber); 
+0

它允許創建表格但不允許插入。 – 2014-10-27 10:13:12

+0

@AnujGarg,你需要想出一個不同的模型。您當前的模型表示,員工必須參考一個部門,但同時您要說部門必須參考員工(通過mgr_ssn)。該設計存在固有的缺陷。您可以通過從部門表中刪除管理員數據來解決這個問題,例如通過添加一個DepartmentManager表。這也可以讓你隨時記錄部門經理的歷史,另外它還可以讓你插入有效的數據。您的模型中可能存在更多這些問題,但我沒有檢查過。 – 2014-10-27 10:30:24

+0

該模型在教科書NAVATHE中給出。那麼它是如何產生缺陷的?而且即使它有一些缺陷,你也可以根據你的需要來整理它。 – 2014-10-27 10:34:25

0

一個簡單的解決方法是從創建EMPLOYEE表中刪除FK到DEPARTMENT(下面的一個),並創建所有表/模式。

FOREIGN KEY (Dno) REFERENCES DEPARTMENT(Dnumber) 

此後,重新創建FK上EMPLOYEE表說

ALTER TABLE EMPLOYEE ADD CONSTRAINT fk_emp 
FOREIGN KEY (Dno) REFERENCES DEPARTMENT(Dnumber); 

看到一個成功創建表演示http://sqlfiddle.com/#!2/410ce

+0

謝謝Rahul它已完成,但它不允許插入表員工。 – 2014-10-27 10:54:21