Isso pode (e deve) ser resolvido no nível do banco de dados se você quiser garantir a integridade dos dados o tempo todo. Existem várias maneiras, uma parcial
UNIQUE INDEX
provavelmente sendo o mais simples e eficaz. CREATE UNIQUE INDEX picture_homepage_uni ON picture (house_id) WHERE homepage;
->sqlfiddle
Também irá acelerar as consultas para recuperar as imagens da página inicial como benefício colateral.
Alterar esquema
Uma abordagem diferente seria adicionar uma coluna
homepage_id
para a mesa house
, apontando para uma imagem selecionada. Automaticamente, apenas 1 imagem pode ser selecionada. Você não precisaria de picture.homepage
não mais. A integridade referencial pode ser um pouco complicada devido às restrições de chave estrangeira em ambas as direções, mas tenho soluções de trabalho como essa.