"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Uma chave estrangeira pode fazer referência a várias tabelas em SQL?

Uma chave estrangeira pode fazer referência a várias tabelas em SQL?

Publicado em 2024-11-20
Navegar:983

Can a Foreign Key Reference Multiple Tables in SQL?

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:

  1. Union Table: Crie uma única tabela de união que incorpore colunas de todas as tabelas pai possíveis. A coluna de chave estrangeira na tabela filho faz referência à tabela união. Ao inserir ou atualizar dados, a tabela de união determina em qual tabela pai real inserir ou atualizar.
  2. Coluna de tipo: Introduza uma coluna de tipo na tabela filho para diferenciar entre possíveis tipos de tabela pai . A coluna de chave estrangeira então faz referência à tabela pai correspondente ao tipo especificado na coluna de tipo.

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.

Declaração de lançamento Este artigo é reproduzido em: 1729692611 Se houver alguma violação, entre em contato com [email protected] para excluí -lo.
Tutorial mais recente Mais>

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