Ciao a tutti,

Sono alle prese con postgres e per un esame devo realizzare un db che oltre ad ospitare i dati deve anche controllare particolari vincoli.

Tra i diversi vincoli ce n'è uno a cui non riesco a venire a capo.
Nel modello ER ho 2 entità (poniamo A e B) A è associata a B con un'associazione (1,1) a (1,n), cioè A è associata ad una e una sola B e B è associata ad almeno una o più A.

Il vincolo che controlla che A sia associata ad una e una sola B è il vincolo di chiave esterna (cioè la tupla di B alla quale voglio associare la tupla di A deve già esistere).
Il vincolo che controlla che B sia associata ad almeno una o più A lo posso realizzare con un trigger che ogni volta controlla che esista una tupla di A correlata a quella tupla di B (altrimenti la tupla di B, secondo il testo, va rimossa dalla base di dati).

Il mio problema è che per garantire tutto questo gli utenti non sono più in grado di inserire ne istanze di A (perchè manca la chiave esterna di B) ne istanze di B (perchè al momento dell'insert non esistono ancora tuple in A che possano soddisfare il vincolo del trigger).

Una soluzione che ho adottato per ora (ma che non mi piace affatto) è quella di creare una funzione ad hoc che prenda come parametri gli attributi di A e B e disabiliti temporaneamente il trigger).... la cosa migliore sarebbe far scattare il trigger AFTER EACH STATEMENT e riuscire in qualche modo a far capire a postgres che le due insert fanno parte di uno stesso statement, ma non so se sia possibile su due tabelle diverse.

Spero che qualcuno ci sia già passato e sappia come si può risolvere il problema in modo semplice e poco macchiavellico.

Grazie.