Eu tenho uma tabela de unidades e uma tabela de relatórios. Uma unidade tem muitos relatórios. Portanto, a tabela de relatórios possui uma chave estrangeira unit_id que corresponde ao id da unidade. Portanto, há uma restrição de chave estrangeira na tabela de relatórios.
Comecei a perceber que às vezes os relatórios precisam ser criados mesmo que a unidade ainda não exista para eles. Então, quando tentei criar um relatório sem uma unidade, obviamente recebi este erro:
ERROR: insert or update on table "reports" violates foreign key constraint "reports_unit_id_fkey"
Detail: Key (unit_id)=(7295) is not present in table "units".
Minha pergunta é se eu remover essa restrição de chave estrangeira e permitir que os relatórios sejam criados sem uma unidade, isso afetará o desempenho quando eu tentar obter todos os relatórios associados a uma unidade?
SELECT * FROM reports WHERE unit_id=7295;
A única outra opção que tenho é inserir os relatórios em alguma tabela de órfãos, mas teria que copiar esses órfãos quando a unidade for criada, o que é um trabalho adicional.
No momento da escrita (PostgreSQL 9.4 e abaixo), o otimizador do PostgreSQL não usa restrições de chave estrangeira para provar nada ou permitir otimizações extras. O único impacto que a remoção pode ter no desempenho é uma melhoria de desempenho devido à remoção de verificações de chave estrangeira.
É uma ferramenta de imposição de integridade de dados, não uma ferramenta de desempenho.