|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 1661
|
[SQL] aiuto
buonasera a tutti ..
ho il seguente comando sql : update corsi_di_laurea set cod_laurea=600 where cod_laurea=566 . quando lo vado ad eseguire compare il seguente messaggio di errore: "ORA-02292: restrizione di integrità violata (ANGERO.BORSE_ERASMUS_FK) - chiave figlia trovata" in quanto la tabella corsi_di_laurea è collegata alla tabella borse_erasmus tramite chiave esterna cod_laurea. Come posso modificare il valore di cod_laurea ad entrambe le tabelle senza avere errori ? ..grazie
__________________
![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Premesso che se stai facendo l'update di una chiave primaria c'è qualcosa che non quadra, e che se non è una chiave primaria non capisco perchè sia una foreign key su un'altra tabella, hai alcune opzioni:
1) riconoscere che c'è qualcosa che non va con il design del db 2) fare l'insert della laurea 566 in corsi_di_laurea, aggiornare borse_erasmus dove c'è cod_laurea 600 mettendo 566, cancellare la vecchia cod_laurea 600 da corsi_di_laurea. Puoi pure farti un trigger, dato che sei su oracle... ma non mi complicherei la vita se non fosse strettamente necessario.
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 1661
|
cod_laurea è la chiave primaria di corsi_di_laurea e viene ereditata da Borse_erasmus ... in quanto il collegamento tra queste due entita' è (1,n) (un corso di laurea bandisce piu' borse erasmus, una borsa erasmus è bandita da un solo corso di laurea) ...
è che deve esserci un modo per modificare sia cod_laurea da corso_di_laurea che da borse_erasmus ....
__________________
![]() |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Se invece come pare giusto (spero che chi ha fatto il database l'abbia realizzato con un pò di criterio) è chiave primaria per quale motivo stai cercando di modificarla? Non è che ti basta modificare un'associazione tra corso di laurea e borse erasmus? Secondo me la cosa migliore è (come già suggerito) inserire un nuovo record con cod_laurea 600 e aggiornare i vecchi riferimenti con il nuovo codice, anche se ancora mi sfugge il motivo per cui devi fare ciò. I corsi identificati da cod_laurea 600 e 566 sono differenti o rappresentano lo stesso corso? Se rappresentano lo stesso corso perchè mai cambiarne l'identificativo? Se sono differenti allora è giusto che siano due record differenti e qualora il corso 566 non sia più attivo ma sia stato sostituito dal corso 600, allora basta aggiornare le correlazioni, una volta inserito il nuovo corso. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:11.