Il peut (et doit) être résolu au niveau de la base de données si vous souhaitez garantir l'intégrité des données à tout moment. Il existe différentes manières, une partielle
UNIQUE INDEX
étant probablement le plus simple et le plus efficace.
CREATE UNIQUE INDEX picture_homepage_uni ON picture (house_id) WHERE homepage;
Accélérera également les requêtes pour récupérer les images de la page d'accueil en tant qu'avantage collatéral.
Modifier le schéma
Une approche différente consisterait à ajouter une colonne homepage_id
à la table house
, pointant vers une image sélectionnée. Automatiquement, une seule image peut être sélectionnée. Vous n'auriez pas besoin de picture.homepage
plus. L'intégrité référentielle peut être un peu délicate à cause des contraintes de clé étrangère dans les deux sens, mais j'ai des solutions de travail comme celle-là.