Para esta sorte do comportamento com um número em mudança limitado mas possível de possibilidades que eu escolheria a seguinte aproximação, de que exige apenas algumas mudanças do comportamento do defeito de formulários do oracle.
Criar uma tabela provisória
criar o cartesian_check global da tabela provisória
((PEOPLEID (mesmo tipo que outro),
interest_id (mesmo tipo que outro),
INTERESSES (mesmo tipo que outro),
varchar2 verific (1))
EM COMETER FILEIRAS DA CONSERVA;
definir o bloco da criança na tabela provisória e marcá-lo como somente updateble;
somente os interesses das colunas e verific têm que visível, e verific somente é updateble
no disparador pre-quiry do bloco da criança
supressão do cartesian_check;
inserção no cartesian_check
seleto: masterblock.people_id, interest_id, INTERESSES,
(seleto descodificar (contagem (*), 0, “N”, “Y ")
do PI o mais people_interest
onde people_id do PI =: master.people_id
e PI.interest_id = it.inertestid) verific
do interests_type ELE;
no disparador do on_update
se verific = “N” então
supressão do PI o mais people_interest
onde people_id do PI =: people_id
e PI.interest_id =: interest_id;
terminar se;
se verific = “Y” então
inserção no interests_type ELE
seleto: people_id: interest_id
de duplo
-- impedir mudar Y a N a Y de introduzir um segundo registro
ONDE NÃO EXISTE (SELECIONAR 1
DO PI o mais people_interest
onde people_id do PI =: people_id
e PI.interest_id =: interest_id)
terminar se;