PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Combinação única em uma mesa


Isso pode (e deve) ser resolvido no nível do banco de dados se você quiser garantir a integridade dos dados o tempo todo. Existem várias maneiras, uma parcial UNIQUE INDEX provavelmente sendo o mais simples e eficaz.
CREATE UNIQUE INDEX picture_homepage_uni ON picture (house_id) WHERE homepage;

->sqlfiddle

Também irá acelerar as consultas para recuperar as imagens da página inicial como benefício colateral.

Alterar esquema


Uma abordagem diferente seria adicionar uma coluna homepage_id para a mesa house , apontando para uma imagem selecionada. Automaticamente, apenas 1 imagem pode ser selecionada. Você não precisaria de picture.homepage não mais. A integridade referencial pode ser um pouco complicada devido às restrições de chave estrangeira em ambas as direções, mas tenho soluções de trabalho como essa.