Formulário com relação n:n

Bom dia!
Gostaria de saber de vocês qual a melhor forma de solucionar a seguinte situação:

  • Tenho uma tabela de “CIDADAO”;
  • Tenho uma tabela de “ENDERECO”;
  • Tenho a tabela de ligação N:N “CIDADAO_ENDERECO”.

Minha dúvida é como construir um formulário de cadastro de cidadão e vincular vários endereços à ele.
Estou tentando uma abordagem do tipo mestre detalhe mas ainda não sei se vai funcionar.
Um cidadão pode ter vários endereços vinculados a ele e um mesmo endereço pode pertencer a vários cidadãos.

Faça o cadastro do endereço separado e relacione com N:N Relations, o que em um ambiente com muitos endereços ficará facilmente inviável.

Mas normalmente pra endereço um mestre/detalhe deveria dar certo, o inconveniente é só o fato de para cada cidadão ter que digitar o endereço novamente.

Então, na verdade o que eu preciso é criar um cadastro de cidadão e no mesmo formulário seja através de aba ou blocos vincular ele com vários endereços.
Exemplo de situações:

  • Se já existir um cidadão eu apenas busco ele em uma consulta e o vinculo com um ou muitos endereços;
  • Se o cidadão não está cadastrado, chamo através de um botão ou link a tela de cadastro de cidadão, efetuo a inclusão e já trago o id dele para vinculá-lo com endereços;
  • Se não existir o endereço para vincular com o usuário, clico em um botão novo e chamo o form de cadastro de endereços após o cadastro trago o id do endereço para vincular com o cidadão;

Como você identifica o cidadão cadastrado? CPF, RG, Nome…como?
É mais fácil você fazer uma evento ajax no campo que seja capaz de fazer a validação por exemplo CPF, se o cara existir avisa no formulário que o usuário esta cadastrado, se não quiser fazer a validação vai em Chave Única e coloca o campo lá como chave única que o SC verifica se existir no banco ele não cadastra.

Consegui criando uma aplicação do tipo aba onde na primeira aba cadastro o cidadão e na segunda abro um formulario Mestre Detalhe onde os campos do cabeçalho do mestre são apenas labels com as informações do cidadão cadastrado ba aba anterior e nos detalhes os endereços vinculados a ele.
O problema é que a regra pede agora que não posso cadastrar o cidadão sem que ele tenha pelo menos um endereço vinculado a ele.
Como posso tratar esse tipo de situação?
Como realizar um rollback caso não seja vinculado endereço algum ao cidadão?
Tem alguma forma de trabalhar com sessão para realizar tal tarefa?