Eu sei que isso já foi respondido, mas abordei esse problema recentemente e criei algo que funciona (e funciona bem fazendo uma busca singleton para cada linha inserida). Veja o exemplo neste artigo:http://michaeljswart.com/2011/06/enforcing-business-rules-vs-avoiding-triggers-which-is-better/
(e não faz uso de uma coluna de identidade)