2012-02-01 4 views
3

Предположим, у меня есть это следующие SQL заявления, с помощью Oracle:Есть ли другой способ создания ограничений при создании таблицы SQL?

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?

+1

Спасибо за редактирование. Вопрос выглядит лучше :) – rofans91

ответ

4

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

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) 
); 
+0

Я искал что-то вроде этого! Спасибо! Отлично! – rofans91

+0

Ничего себе, я никогда раньше этого не видел. Отлично! – ruakh

Смежные вопросы