【发布时间】:2015-09-24 11:53:47
【问题描述】:
我正在关注这个book 我的数据库类。该数据库有 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) );
Employee 表有一个递归关系来证明“一个员工是另一个员工的主管”。它还引用 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');
上面的查询不会执行,因为员工表中没有数据。我的问题是我们是否应该首先插入数据然后更改表并强制执行参照完整性约束。或者有什么办法。您的建议/建议将不胜感激。谢谢。
【问题讨论】:
-
它不需要像放弃约束那样激烈。只允许该列为空。
标签: mysql sql database referential-integrity