PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Combinaison unique dans une table

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;

->sqlfiddle

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à.