我正在为我的数据库课程学习这本书。该数据库有6个表。从其中的6个表格中,我将发布其中两个表格。
/*EMPLOYEE Table */
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) );
雇员表具有递归关系,以显示“一个雇员是另一名雇员的主管”。它还引用DEPARTMENT表以显示员工在部门中工作。以下是DEPARTMENT表的架构。
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)
);
DEPARTMENT表引用了employee表,以表明该雇员管理一个部门。当插入诸如
insert into EMPLOYEE values
('John','B','Smith','123456789','1965-01-09','731 Fondren, Houston, TX',
'M',30000,'333445555',5);
我们将无法执行上述查询,因为存在参照完整性FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn)
。如果我尝试下面的查询也一样
insert into department values ('Research',5,'333445555','1988-05-22');
由于employee表中没有数据,因此上述查询将不会执行。我的问题是我们应该首先插入数据,然后更改表并强制执行参照完整性约束。还是有办法解决。您的建议/建议将不胜感激。谢谢你。
外键可以具有空值。因此,您可以输入将外键值设置为null的值,例如最顶层的主管,他的上方将没有主管。
因此,通常的想法是从下至上输入数据,例如在没有外键的表中输入值,然后在引用该表的表顶部输入值,依此类推...
确切的方法将取决于其余的您在示例中使用的表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句