Создать таблицу с первичным ключом и 2 внешними ключами - PullRequest
2 голосов
/ 14 апреля 2020

Создать таблицу назначений WP C. Примечание: есть составной ПЕРВИЧНЫЙ КЛЮЧ и 2 ИНОСТРАННЫХ КЛЮЧА, которые потребуют 3 ОГРАНИЧЕНИЯ. См. Рисунок 2-44, взятый из учебника. Также помните, что никакие 2 ограничения в одной и той же схеме не могут иметь одинаковое имя. Вот неполный DDL для вас:

CREATE TABLE ASSIGNMENT 
(
    EmployeeNumber INTEGER NOT NULL, 
    ProjectID INTEGER NOT NULL,
    Hoursworked NUMBER (6,2),

    CONSTRAINT PK_Assignment 
        PRIMARY KEY (EmployeeNumber, ProjectID),

    CONSTRAINT FK_Assignment_EMPLOYEE 
        FOREIGN KEY (EmployeeNumber) REFERENCES EMPLOYEE,…

(пожалуйста, заполните оставшуюся часть этого утверждения самостоятельно)

Я получаю ошибку:

Ошибка запуска в строке: 1 в команде:

CREATE TABLE ASSIGNMENT 
(
    EmployeeNumber INTEGER NOT NULL,
    ProjectID INTEGER NOT NULL,
    Hoursworked NUMBER (6,2),

    CONSTRAINT PK_Assignment 
        PRIMARY KEY (EmployeeNumber, ProjectID),
    CONSTRAINT FK_Assignment_EMPLOYEE 
        FOREIGN KEY (EmployeeNumber), 
    CONSTRAINT FK_Project_Assignment 
        FOREIGN KEY (ProjectID) REFERENCES EMPLOYEE.employeenumber(EmployeeNumber), PROJECT.projectID(ProjectId)
)

Отчет об ошибке:

ORA-00905: отсутствует ключевое слово
00905. 00000 - "отсутствует ключевое слово"
* Причина:
* Действие:

Я не могу найти то, что мне не хватает .. Может кто-нибудь помочь, пожалуйста?

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Вы решили создать контур ограничений (что вполне нормально, только если вы следовали синтаксису). Просто чтобы упомянуть другие опции, может быть, вы найдете их полезными.

Обратите внимание, что столбцы, которые составляют первичный ключ, не должны явно объявляться как 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.
0 голосов
/ 14 апреля 2020

В строке CONSTRAINT FK_Assignment_EMPLOYEE FOREIGN KEY (EmployeeNumber), отсутствует REFERENCES.

Должно быть

CONSTRAINT FK_Assignment_EMPLOYEE FOREIGN KEY (EmployeeNumber) REFERENCES EMPLOYEE.employeenumber(EmployeeNumber), 
CONSTRAINT FK_Project_Assignment FOREIGN KEY (ProjectID) REFERENCES PROJECT.projectID(ProjectId)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...