2013-11-01 7 views
6

SQL codice del database:O1RA-0229 vincolo di integrità violata - chiave padre non trovata

CREATE TABLE MYBUILDING 
(
B_NUMBER NUMBER(1)  NOT NULL, 
NAME VARCHAR2(25)  NOT NULL, 
ADDRESS VARCHAR2(40)  NOT NULL, 
P_CODE VARCHAR2(6) , 
FLOOR_NUM_UP NUMBER(3)  DEFAULT '1' NOT NULL CHECK (FLOOR_NUM_UP >= 0), 
FLOOR_NUM_DOWN NUMBER(3) DEFAULT '0' NOT NULL CHECK (FLOOR_NUM_DOWN >= 0), 
CONS_DATE DATE   NOT NULL, 
PRIMARY KEY (B_NUMBER) 
); 
------- 
CREATE TABLE FLOOR 
(
B_NUMBER NUMBER(1)  NOT NULL, 
F_NUMBER NUMBER(2)  NOT NULL CHECK (F_NUMBER >= -4 AND F_NUMBER <= 25), 
SPACE_M NUMBER(4)  NOT NULL CHECK (SPACE_M > 0), 
PRIMARY KEY (B_NUMBER, F_NUMBER), 
FOREIGN KEY (B_NUMBER) REFERENCES MYBUILDING 
); 
------ 
CREATE TABLE TENANT 
(
TENANT_NUM NUMBER(3)  NOT NULL, 
TENANT_NAME VARCHAR2(40) NOT NULL, 
C_NAME VARCHAR2(40)  NOT NULL, 
C_ADDRESS VARCHAR2(40), 
P_CODE VARCHAR2(6), 
P_NUMBER NUMBER(12), 
PRIMARY KEY (TENANT_NUM) 
);   
------- 
CREATE TABLE LOCATION 
(
B_NUMBER NUMBER(1)  NOT NULL, 
F_NUMBER NUMBER(2)  NOT NULL, 
L_NUMBER NUMBER(3)  NOT NULL CHECK (L_NUMBER > 0 AND L_NUMBER < 100), 
SPACE_M NUMBER(4)  NOT NULL, 
RATE NUMBER(5)   NOT NULL CHECK (RATE >= 0 AND RATE <= 350), 
RENT NUMBER(4)   NOT NULL, 
S_DATE DATE, 
E_DATE DATE, 
TENANT_NUM NUMBER(3), 
PRIMARY KEY (L_NUMBER, F_NUMBER, TENANT_NUM), 
CONSTRAINT FK_TENANT FOREIGN KEY (TENANT_NUM) REFERENCES TENANT ON DELETE SET NULL, 
FOREIGN KEY (B_NUMBER, F_NUMBER) REFERENCES FLOOR 
); 

Ciao a tutti! Ho fatto una serie di tavoli e penso di aver fatto tutto correttamente. Ho inserito i miei valori di input su tutti i tavoli senza intoppi tranne che per la tabella LOCATION.

questo è l'errore che mi sta dando.

INSERT INTO LOCATION VALUES (1, 1, 1, 300, 101, 0, '01-JAN-2004', '30-JUN-2004', 1); 
INSERT INTO LOCATION VALUES (1, 1, 1, 300, 101, 0, '01-JAN-2004', '30-JUN-2004', 1) 

ERRORE alla linea 1: ORA-02291: vincolo di integrità (ASSIGNMENT.FK_TENANT) violato - genitore chiave non trovato.

Qualsiasi aiuto e suggerimenti saranno apprezzati. Grazie!

corretto.

CREATE TABLE LOCATION(

B_NUMBER NUMBER(1)  NOT NULL, 

F_NUMBER NUMBER(2)  NOT NULL, 

L_NUMBER NUMBER(3)  NOT NULL CHECK (L_NUMBER > 0 AND L_NUMBER < 100), 

SPACE_M NUMBER(4)  NOT NULL, 


RATE NUMBER(5)   NOT NULL CHECK (RATE >= 0 AND RATE <= 350), 

RENT NUMBER(4)   NOT NULL, 

S_DATE DATE, 

E_DATE DATE, 

TENANT_NUM NUMBER(3)  NULL, 

PRIMARY KEY (L_NUMBER, B_NUMBER, F_NUMBER, TENANT_NUM), 

FOREIGN KEY (TENANT_NUM) REFERENCES TENANT ON DELETE SET NULL, 

FOREIGN KEY (B_NUMBER, F_NUMBER) REFERENCES FLOOR 

); 
+1

Allora ... qual è la domanda? (I tag, il titolo e il messaggio di errore sembrano coprire tutto.) – user2864740

risposta

6

tua dichiarazione dell'inserto sta cercando di inserire un valore nella colonna TENANT_NUM che non esiste nella tabella locatario - (C'è un vincolo di chiave esterna sul tavolo Location).

+0

che ha perfettamente senso .... grazie! tutto funziona bene ora! Vorrei anche chiedere se è possibile inserire un valore nullo su TENANT_NUM sotto la tabella LOCATION? –

+0

TENANT_NUM fa parte della chiave primaria per quella tabella, quindi la risposta è no. – user172839