Può (e dovrebbe) essere risolto a livello di DB se si desidera garantire l'integrità dei dati in ogni momento. Esistono vari modi, un parziale
UNIQUE INDEX
probabilmente è il più semplice ed efficace.
CREATE UNIQUE INDEX picture_homepage_uni ON picture (house_id) WHERE homepage;
Velocerà anche le query per recuperare le immagini della home page come vantaggio collaterale.
Cambia schema
Un approccio diverso sarebbe quello di aggiungere una colonna homepage_id
al tavolo house
, puntando a un'immagine selezionata. Automaticamente, è possibile selezionare solo 1 immagine. Non avresti bisogno di picture.homepage
più. L'integrità referenziale potrebbe essere un po' complicata a causa dei vincoli di chiave esterna in entrambe le direzioni, ma ho soluzioni funzionanti come questa.