On Mon, 25 Oct 2010 10:45:46 +0200, Matteo Mattsteel Vitturi
<mattst...@hotmail.it> wrote:

> L'alternativa potrebbe essere quella di disabilitare per un momento il
> vincolo di foreign-key, effettuare i due update (come dici tu nel tuo
> pezzetto di codice) ed infine riattivare la foreign-key... e qui
potresti
> non riuscirci... perché è successo qualcosa nel frattempo.

Creare la fkey non è gratis: il database deve fare un full scan della
tabella per verificare che tutti i record verifichino la condizione,
altrimenti si rifiuta di creare il vincolo. In più droppare/creare la fkey
richiede lock che possono essere ostacolati da altre query concorrenti. La
soluzione di Giovanni è quella giusta.

> Per inciso, con SQLite non avresti il problema in quanto le foreign-key
> sono sì dichiarabili ma non vengono imposte (enforced) al database.

Se l'ha dichiarata, si vede la voleva. Se un database non la implementa,
questa non è una feature :) La tua è una frase buffa: è come dire che il
database FooDB(tm) ha l'implementazione dei trigger più veloce che ci sia
in giro e nessuno può batterlo (n.b. FooDB(tm) accetta la sintassi del
comando CREATE TRIGGER ma non li implementa).

-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a