сообщение об ошибке ORA-02270: нет соответствующего уникального или первичного ключа для этого списка столбцов

У меня проблемы с отображением вещей в отдельных таблицах данных. Там будут таблицы для DEPARTMENT_LOCATIONS, DEPARTMENT, EMPLOYEE и PROJECT. Пока все таблицы созданы, кроме PROJECT, потому что я получаю сообщение об ошибке для заголовка моего вопроса.

Ниже представлена ​​информация, которую я использовал для создания таблиц, которые были созданы без ошибок:

СОТРУДНИК Стол:

CREATE TABLE EMPLOYEE
(FNAME VARCHAR(25) NOT NULL,
MINIT CHAR(1),
LNAME VARCHAR(25) NOT NULL,
SSN NUMBER(10) NOT NULL,
BDATE DATE NOT NULL,
ADDRESS VARCHAR(30) NOT NULL,
SEX CHAR(1) NOT NULL,
SALARY DECIMAL(6,2) NOT NULL,
SUPERSSN NUMBER(10),
DNO NUMBER (1) NOT NULL,
PRIMARY KEY (SSN),
FOREIGN KEY (DNO) REFERENCES DEPT_LOCATIONS(DNUMBER));

Таблица DEPARTMENT_LOCATIONS:

CREATE TABLE DEPT_LOCATIONS
(DNUMBER NUMBER(1) NOT NULL,
DLOCATION VARCHAR(25) NOT NULL,
PRIMARY KEY (DNUMBER));

ОТДЕЛ Таблица:

CREATE TABLE DEPARTMENT
(DNUMBER NUMBER(1) NOT NULL,
DNAME VARCHAR(25) NOT NULL,
MGRSTARTDATE DATE NOT NULL,
MGRSSN NUMBER(10) NOT NULL,
PRIMARY KEY (DNUMBER),
FOREIGN KEY (DNUMBER) REFERENCES DEPT_LOCATIONS(DNUMBER),
FOREIGN KEY (MGRSSN) REFERENCES EMPLOYEE(SSN));

Теперь, когда я ввожу следующую информацию для таблицы PROJECT, я получаю сообщение об ошибке «ORA-02270: нет соответствующего уникального или первичного ключа для этого списка столбцов.)

CREATE TABLE PROJECT
(PNUMBER NUMBER(2,1) NOT NULL PRIMARY KEY,
PNAME VARCHAR(25) NOT NULL,
PLOCATION VARCHAR(25) NOT NULL,
DNUM NUMBER(1) NOT NULL,
FOREIGN KEY (PLOCATION) REFERENCES DEPT_LOCATIONS(DLOCATION),
FOREIGN KEY (DNUM) REFERENCES DEPT_LOCATIONS(DNUMBER));

Почему возникает эта ошибка и что мне нужно сделать, чтобы ее исправить? Спасибо.


person JRW2252    schedule 03.04.2014    source источник


Ответы (1)


Вы должны объявить dlocation уникальным, чтобы ссылаться на него в другой таблице.

CREATE TABLE DEPT_LOCATIONS
(DNUMBER NUMBER(1) NOT NULL,
DLOCATION VARCHAR(25) UNIQUE,
PRIMARY KEY (DNUMBER));
person San    schedule 03.04.2014
comment
Если объявить его уникальным, можно ли будет ссылаться на любое местоположение отдела по его номеру? Ограничит ли это возможность иметь несколько номеров отделов в одном месте? - person JRW2252; 03.04.2014
comment
У вас уже есть первичный ключ на DNUMBER, и вы можете ссылаться на любой dept_location, используя этот первичный ключ. Объявление DLOCATION уникальным гарантирует, что в столбце DLOCATION не может быть никакого повторяющегося значения, кроме null, и что этот столбец может использоваться как ссылка на внешний ключ в другой таблице. - person San; 03.04.2014