Предположим, у меня есть следующие SQL-операторы с использованием Oracle:
drop table department cascade constraints;
drop table facultyStaff cascade constraints;
drop table student cascade constraints;
drop table campusClub cascade constraints;
drop table studentClub cascade constraints;
create table department
( code varchar2(3) primary key,
name varchar2(40) not null,
chair varchar2(11));
create table facultyStaff
( staffID varchar2(5) primary key,
dob date,
firstName varchar2(20),
lastName varchar2(20),
rank varchar2(10),
deptCode varchar2(3),
constraint rankValue check (rank in ('Assistant', 'Associate', 'Full', 'Emeritus')),
constraint facultyDeptFk foreign key (deptCode) references department (code));
create table student
( studentId varchar2(5) primary key,
dob date ,
firstName varchar2(20),
lastName varchar2(20),
status varchar(10),
major varchar(3),
constraint statusValue check (status in ('Freshman', 'Sophomore', 'Junior', 'Senior', 'Graduate')),
constraint studentMajorFk foreign key (major) references department (code));
alter table department
add constraint departmentChairFk foreign key(chair) references facultyStaff(staffId) on delete set null;
Поскольку существует рекурсивная ссылка между кафедрой и факультетом на отношения кафедры, ограничение внешнего ключа для кафедры в отделе невозможно определить дотаблица факультета определена.Ограничение должно быть добавлено после определения факультета с помощью оператора alter table.
Есть ли другие способы сделать это, чтобы каким-то образом автоматизировать создание ограничения, исключив таким образом оператор alter table
?