Есть ли другой способ создания ограничений при создании таблицы SQL?

Предположим, у меня есть следующие 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 заявление?

 rofans9101 февр. 2012 г., 04:45
Спасибо за редактирование. Вопрос выглядит лучше :)

Ответы на вопрос(1)

Решение Вопроса

Вы можете сделать это ссоздать схему заявление:

create schema authorization [schema name]
create table department 
(   code      varchar2(3) primary key,
    name      varchar2(40)  not null,
    chair     varchar2(11),
    constraint departmentChairFk foreign key(chair) references facultyStaff(staffId) on delete set null
)
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)
);
 rofans9102 февр. 2012 г., 05:38
Я искал что-то вроде этого! Спасибо! Это здорово!
 ruakh02 февр. 2012 г., 15:33
Вау, я никогда не видел это заявление раньше. Отлично!

Ваш ответ на вопрос