съобщение за грешка 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