Integridade dos Dados

Olá, pessoal. Tem uma dúvida, numa aplicação cliente onde a regra de negócio está na aplicação, e existe a tabela
compra e itens Compra, na hora que eu for da inserir na aplicação como faço para manter integridade da pk da compra
nos itens compra. Se esta minha aplicação estiver sendo executada por vários usuários ao mesmo tempo.
Por exmplo depois que eu der um iserir teria que da um select para recuperar esta pk, para os meus
itens compra, mas se tiver outro usuáro que estiver inserindo ao mesmo tempo?
Ou seria melhor fazer um transaction com compra e item compra ?

Isso vai depender de quem está gerando a PK da tabela para você.

Quando é gerada no banco de dados, através de sequence, auto_increment, etc… o banco costuma fornecer uma forma segura de recuperar essa pk, sem problemas de concorrência.

Nessa sua solução proposta, mesmo usando transação, o select que leria a pk depois, pode ser influenciado por outros usuários, dependendo do nível de isolação.
Evite isso.