Het kan (en moet) worden opgelost op DB-niveau als u de gegevensintegriteit te allen tijde wilt garanderen. Er zijn verschillende manieren, een gedeeltelijk
UNIQUE INDEX
waarschijnlijk de eenvoudigste en meest effectieve.
CREATE UNIQUE INDEX picture_homepage_uni ON picture (house_id) WHERE homepage;
Versnelt ook het zoeken naar afbeeldingen op de startpagina als bijkomend voordeel.
Schema wijzigen
Een andere benadering is het toevoegen van een kolom homepage_id
naar de tafel house
, wijzend naar een geselecteerde foto. Er kan automatisch slechts 1 foto worden geselecteerd. Je hebt picture.homepage
niet nodig meer. Referentiële integriteit is misschien een beetje lastig vanwege de beperkingen van buitenlandse sleutels in beide richtingen, maar ik heb zulke werkende oplossingen.