Puede (y debe) resolverse a nivel de base de datos si desea garantizar la integridad de los datos en todo momento. Hay varias formas, una parcial
UNIQUE INDEX
probablemente sea el más simple y efectivo.
CREATE UNIQUE INDEX picture_homepage_uni ON picture (house_id) WHERE homepage;
También acelerará las consultas para recuperar las imágenes de la página de inicio como beneficio colateral.
Cambiar esquema
Un enfoque diferente sería agregar una columna homepage_id
a la mesa house
, apuntando a una imagen seleccionada. Automáticamente, solo se puede seleccionar 1 imagen. No necesitarías picture.homepage
más. La integridad referencial puede ser un poco complicada debido a las restricciones de clave externa en ambas direcciones, pero tengo soluciones que funcionan como esa.