PDA

View Full Version : [MySQL] Problemi con delle foreign key


fbcyborg
08-01-2010, 15:32
Salve a tutti,

ho un problema quando vado a fare l'UPDATE di alcuni campi di una tabella, a causa dei vincoli di foreign key.

Ho due tabelle, descritte come segue:
Tabella ContoCorrente con numero di conto e banca:

+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| NUM | int(11) | NO | PRI | 0 | |
| BANCA | varchar(30) | NO | PRI | | |
+---------+-------------+------+-----+---------+-------+
Tabella Fattura (semplificata) con id,totale,numero conto corrente di addebito e banca:

+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| ID | varchar(30) | NO | PRI | | |
| TOTALE | float(10,2) | YES | | NULL | |
| NUM_CONTO | int(11) | YES | MUL | NULL | |
| BANCA | varchar(30) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+

Per quanto riguarda la tabella fattura ho 2 foreign key, ovvero:
FOREIGN KEY (`NUM_CONTO`, `BANCA`) REFERENCES `CONTOCORRENTE` (`NUM`, `BANCA`)
Ovvero voglio che quando indico un conto corrente insieme al nome della banca, quel contocorrente/banca deve stare nella tabella contocorrente.
Per quanto riguarda l'inserimento non ci sono problemi.

Il problema è che quando vado a fare una update, mi va in errore.
Es.:
UPDATE FATTURA SET BANCA="Unicredit" AND NUM_CONTO=1235 where ID="1234";
Ovviamente in contocorrente è presente una tupla con:
BANCA="Unicredit" e NUM=1235.

L'errore che ottengo è il seguente:
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`FATTURA`, CONSTRAINT `fattura_ibfk_1` FOREIGN KEY (`NUM_CONTO`, `BANCA`) REFERENCES `CONTOCORRENTE` (`NUM`, `BANCA`))

Più o meno intuisco il motivo per cui accade (quei valori sono proprio linkati ai corrispondenti nella tabella contocorrente) però non riesco ancora ad inquadrare come aggirare il problema.
Una soluzione potrebbe essere quella di togliere il vincolo di foreign key, ma prima vorrei sapere se c'è qualche altro modo.

Qualcuno mi sa aiutare?

SerMagnus
08-01-2010, 16:00
ma esiste il record con valori "UNICREDIT" e "1235"? :mbe:

tomminno
08-01-2010, 16:50
Scusa ma così hai la tabella ContoCorrente completamente duplicata in Fattura.
Non ti conviene creare una chiave primaria Id in conto corrente e usare in fattura un solo campo IdContoCorrente?

fbcyborg
08-01-2010, 17:04
ma esiste il record con valori "UNICREDIT" e "1235"? :mbe:


Ovviamente in contocorrente è presente una tupla con:
BANCA="Unicredit" e NUM=1235.

Scusa ma così hai la tabella ContoCorrente completamente duplicata in Fattura.
Non ti conviene creare una chiave primaria Id in conto corrente e usare in fattura un solo campo IdContoCorrente?
In realtà non è proprio così; però hai ragione... basterebbe creare un riferimento al conto corrente usato invece di replicarlo...

Ora ci ragiono su..