2015-11-24 2 views
0

У меня возникают проблемы при добавлении значений в эту таблицу. Нижние два ограничения FK ссылаются на объекты подкласса, которые имеют один и тот же PK. У меня есть значения, добавленные в соответствующие подклассы.FK Ссылки 2 Подкласс Ошибка при добавлении данных

Oracle пинает эту ошибку: ORA-02291

Я уверен, что является причиной его является то, что таблица не может сказать, какая таблица ссылаться на FK к. Есть ли проверка, которую я могу запустить, чтобы пройти через обе таблицы, чтобы проверить, к какой таблице принадлежит FK?

CREATE TABLE Lease( 
leaseNo  CHAR(9),  
duration  NUMBER(1) NOT NULL,  
inDate  DATE  NOT NULL,  
outDate  DATE,  
matNo   CHAR(9),  
plNo   CHAR(9), 

CONSTRAINT lease_pk  PRIMARY KEY (leaseNo),  
CONSTRAINT student_fk FOREIGN KEY (matNo) REFERENCES Student(matNo),  
CONSTRAINT bedroom_fk FOREIGN KEY (plNo) REFERENCES BedRoom(plNo), 
CONSTRAINT hallroom_fk FOREIGN KEY (plNo) REFERENCES HallRoom(plNo) 
); 

Полная модель:

enter image description here

+0

Пожалуйста, покажите * все * релевантную информацию. Это ошибка * runtime *. Покажите данные таблицы ввода и данные таблицы вывода, код, который вы запускали, и сообщение об ошибке. Вы должны сделать это для вопроса «что случилось с моим кодом». – philipxy

+0

И не используйте тип данных CHAR, у вас будут проблемы. Используйте varchar2. –

ответ

1

У вас есть возможность изменить схему? Если это так, вы можете рассмотреть сворачивающиеся таблицы BedRoom и HallRoom в одну таблицу Room. Затем введите таблицу RoomType для хранения типов («Зал» и «Кровать»). Затем Room имеет FK до RoomType и Lease имеет FK до Room. Что-то вроде этого:

CREATE TABLE RoomType(
    id NUMBER 
    ,type VARCHAR2(32) 
); 


CREATE TABLE Room(
    plno  VARCHAR2(9) 
    ,room_type VARCHAR2(32) 
    ,rmno  VARCHAR2(4) 
    ,rent  NUMBER(6,2) 
    ,roomno VARCHAR2(9) 

    ,CONSTRAINT room_pk PRIMARY KEY (plno) 
    ,CONSTRAINT room_room_type_fk FOREIGN KEY(room_type) REFERENCES RoomType(id)  
); 


CREATE TABLE Lease( 
    leaseNo VARCHAR2(9), 
    ,duration NUMBER(1) NOT NULL 
    ,inDate  DATE  NOT NULL  
    ,outDate DATE 
    ,matNo  CHAR(9) 
    ,plNo  CHAR(9) 

    ,CONSTRAINT lease_pk PRIMARY KEY (leaseNo) 
    ,CONSTRAINT student_fk FOREIGN KEY(matNo) REFERENCES Student(matNo) 
    ,CONSTRAINT room_fk FOREIGN KEY(plNo) REFERENCES Room(plNo) 
); 
1

Вы сказали СУБД, что есть FK ограничения от plno к столам Спальня и Hallroom. Таким образом, нет «невозможно определить, какая таблица ссылается на FK». Ограничение FK говорит о том, что перечисленные значения столбцов в таблице ссылок должны отображаться в соответствующих столбцах в ссылочной таблице. Мы называем список столбцов FK, когда он является ссылочным списком в одном или более Ограничения FK.

Это runtime Ошибка. Вы не ввели значение в одну из спальни или зала plno, прежде чем положить его в Lease plno.

Просьба показать все релевантная информация: DDL, данные входных таблиц, код, который вы выполнили, данные таблицы вывода и сообщение об ошибке.

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