Newsgroup: it.comp.software.database
Titolo: Firebird Foreign Key

Sto provando a creare la FK, ma ricevo sempre errore
 
Table1 TB_COMUNI
Campi ID_COMUNE  INTEGER PrimaryKey not null
...
 
Table2 TB_EMAIL
Campi ID_EMAIL   INTEGER PrimaryKey not null
...
       ID_COMUNE  INTEGER
 
voglio inserire una FK sul campo ID_COMUNE della TB_EMAIL
che faccia riferimento a ID_COMUNE della TB_COMUNI
 
ALTER TABLE TB_EMAIL
ADD CONSTRAINT FK_TB_EMAIL_1
FOREIGN KEY (ID_COMUNE)
REFERENCES TB_COMUNI(ID_COMUNE)
 
violation of FOREIGN KEY constraint "".
violation of FOREIGN KEY constraint "FK_TB_EMAIL_1" on table "TB_EMAIL".
Foreign key reference target does not exist.
 
la Tabella TB_COMUNI esiste come pure il Campo ID_COMUNE
perche' mi segnala target does not exists ?
 


D:\fdb>isql -u sysdba test.fdb
Database:  test.fdb, User: sysdba
SQL> create table TB_COMUNI(ID_COMUNE INTEGER primary key);
SQL> create table TB_EMAIL(ID_EMAIL INTEGER primary key, ID_COMUNE
INTEGER);
SQL> show table;
       TB_COMUNI                              TB_EMAIL
 
SQL> ALTER TABLE TB_EMAIL ADD CONSTRAINT FK_TB_EMAIL_1 FOREIGN KEY
(ID_COMUNE) REFERENCES TB_COMUNI(ID_COMUNE);
SQL> show table;
       TB_COMUNI                              TB_EMAIL
 
SQL> show table TB_EMAIL;
ID_EMAIL                        INTEGER Not Null
ID_COMUNE                       INTEGER Nullable
CONSTRAINT FK_TB_EMAIL_1:
  Foreign key (ID_COMUNE)    References TB_COMUNI (ID_COMUNE)
CONSTRAINT INTEG_4:
  Primary key (ID_EMAIL)
 
SQL> quit;
 
 
Qual e' il tuo _*VERO*_ problema?
 
C:\>iao Angelo
 
P.S. A parte il "PrimaryKey" (che e' sbagliato) ed il "not null" (che
e'
     superfluo per una Primary key) ho fatto copia ed incolla del tuo
     sql.

 perche' mi segnala target does not exists ?
 
L'errore lo da quando esegui l'istruzione "alter table" o quando
inserisci nuovi record?
Nel primo caso, le tabelle sono vuote o contengono gia' dei dati?
 
ciao
Giacomo

> [..]

sto usando IbExpert, e se non definisco il campo ID_COMUNE not null non 
mi fa creare la primary key
 
su TB_COMUNI constraint name  on field  index_name
                PK_TB_COMUNI  ID_COMUNE PK_TB_COMUNI
 
su TB_EMAIL   constraint name  on field  index_name
                PK_TB_EMAIL      ID_EMAIL PK_TB_EMAIL
 
per creare FK -> pannello Constraint -> Foreign Keys
 
Constraint Name   OnField    FKTable   Update Rule Delete Rule
FK_TB_EMAIL_1    ID_COMUNE  ID_COMUNI   NoAction    NoAction
 
il problema 1 : dov'e' l'errore che impedisce di creare la FK
il problema 2 : evitare cancellazioni accidentali, su TB_COMUNI in caso 
di esistenza riferimento ID_COMUNE su TB_EMAIL (nel caso mi dimenticassi 
di fare il controllo da codice)
 
ciao grazie Alex
 
 

>
quando eseguo Compile ... utilizzando IBExpert
le tabelle contengono dati
 
 

 le tabelle contengono dati
 
Nel qual caso � possibile che i dati esistenti non soddisfino la constraint.
Fai un dump, ricostruisci un db vuoto e prova.
 
--
TeeBX VoIP communication platform (coming soon)
http://code.google.com/p/teebx/
 
-----------------------------------------------
Lightweight++ Business Friendly++ Open++

> --
ho fatto come hai detto, ed ora le FK si creano.
 
ciao Grazie