Restrições de chave estrangeira polimórfica: uma abordagem versátil
A restrição de chave estrangeira convencional estabelece um link direto entre duas tabelas especificadas. No entanto, e se você precisar de um relacionamento polimórfico em que uma coluna se refere a uma das várias tabelas pai possíveis?
É possível uma chave estrangeira para múltiplas tabelas?
Infelizmente, a resposta é negativa. Uma restrição de chave estrangeira só pode fazer referência a uma única tabela pai. Essa limitação surge da necessidade de integridade e consistência dos dados nos sistemas de banco de dados.
Considerações Práticas
Apesar da limitação inerente, existem abordagens práticas que emulam o comportamento de um chave estrangeira para várias tabelas:
Exemplos no MySQL e PostgreSQL
No MySQL, o seguinte instrução cria uma tabela de união:
CREATE TABLE union_table AS
SELECT * FROM subordinates
UNION ALL
SELECT * FROM products;
A restrição de chave estrangeira na tabela filha seria então:
ALTER TABLE images
ADD FOREIGN KEY (person_id) REFERENCES union_table(id);
No PostgreSQL, uma abordagem semelhante é usada:
CREATE TABLE union_table AS
SELECT * FROM subordinates
UNION ALL
SELECT * FROM products;
A restrição de chave estrangeira se torna:
ALTER TABLE images
ADD FOREIGN KEY (person_id) REFERENCES union_table(id);
Conclusão
Embora uma chave estrangeira direta para múltiplas tabelas não seja viável, estratégias alternativas permitem uma chave estrangeira polimórfica relacionamento chave em sistemas de banco de dados SQL. Essas estratégias preservam a integridade dos dados e ao mesmo tempo fornecem flexibilidade para acomodar várias tabelas pai.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3