Heias.
Eu dei uma vista de olhos ao topico todo.
Como já foi dito aqui, eu gerava esse campo especial que tu queres através de um trigger sempre que se inserisse imóveis. E nunca o utilizaria como chave (mas convém ser indexado).
O problema da race condition é solucionável usando transactions. Podes usar stored procedures, não faças é isso fora da db porque não tens maneira de impedir race conditions e um agente ficar com duas casa com o nº 40 por exemplo.
So há uma coisa que não percebi bem. Que é o que acontece quando se apaga uma casa ou agente. Se apagares uma casa não faz sentido que, se o contador de casas desse agente estava no 41 quando fores inserir uma nova casa ele fique na mesma no 41 porque utilizaste o espaço deixado vazio pela casa que foi apagada. Penso que fará mais sentido pensar no nº de casa como um contador de todas as casa que o agente já teve e não de todas as casa que o agente actualmente tem.
Just my 2 cents.
Eu dei uma vista de olhos ao topico todo.
Como já foi dito aqui, eu gerava esse campo especial que tu queres através de um trigger sempre que se inserisse imóveis. E nunca o utilizaria como chave (mas convém ser indexado).
O problema da race condition é solucionável usando transactions. Podes usar stored procedures, não faças é isso fora da db porque não tens maneira de impedir race conditions e um agente ficar com duas casa com o nº 40 por exemplo.
So há uma coisa que não percebi bem. Que é o que acontece quando se apaga uma casa ou agente. Se apagares uma casa não faz sentido que, se o contador de casas desse agente estava no 41 quando fores inserir uma nova casa ele fique na mesma no 41 porque utilizaste o espaço deixado vazio pela casa que foi apagada. Penso que fará mais sentido pensar no nº de casa como um contador de todas as casa que o agente já teve e não de todas as casa que o agente actualmente tem.
Just my 2 cents.