创建一个数据库

问题描述:

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

您可以尝试创建并填充没有外键约束的表,然后添加外键约束。

只需在创建表时添加外键,例如,

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

一个简单的解决方法是从创建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