Вы решили создать контур ограничений (что вполне нормально, только если вы следовали синтаксису). Просто чтобы упомянуть другие опции, может быть, вы найдете их полезными.
Обратите внимание, что столбцы, которые составляют первичный ключ, не должны явно объявляться как not null
, потому что ограничение первичного ключа в любом случае не будет принимать нули .
Контурные ограничения (они соответствуют определениям столбцов):
SQL> create table assignment
2 ( employeenumber integer,
3 projectid integer,
4 hoursworked number (6,2),
5 constraint pk_assignment
6 primary key (employeenumber, projectid),
7 constraint fk_assignment_employee
8 foreign key (employeenumber) references employee (employeenumber),
9 constraint fk_project_assignment
10 foreign key (projectid) references project (projectid)
11 );
Table created.
Встроенные ограничения в той же строке, что и столбцы; поскольку существует составной первичный ключ (состоит из двух или более столбцов), он не может быть встроенным :
SQL> create table assignment
2 ( employeenumber integer constraint fk_assignment_employee
3 references employee (employeenumber),
4 projectid integer constraint fk_project_assignment
5 references project (projectid),
6 hoursworked number (6,2),
7 constraint pk_assignment
8 primary key (employeenumber, projectid)
9 );
Table created.
Таблица создается отдельно, ограничения создаются с помощью ALTER TABLE
команда:
SQL> create table assignment
2 ( employeenumber integer,
3 projectid integer,
4 hoursworked number (6,2)
5 );
Table created.
SQL> alter table assignment add constraint pk_assingment primary key (employeenumber, projectid);
Table altered.
SQL> alter table assignment add constraint fk_assignment_employee
2 foreign key (employeenumber) references employee (employeenumber);
Table altered.
SQL> alter table assignment add constraint fk_project_assignment
2 foreign key (projectid) references project (projectid);
Table altered.