"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 > Como lidar com relacionamentos de chave estrangeira para várias tabelas em bancos de dados SQL?

Como lidar com relacionamentos de chave estrangeira para várias tabelas em bancos de dados SQL?

Publicado em 2024-12-21
Navegar:642

How to Handle Foreign Key Relationships to Multiple Tables in SQL Databases?

Lidando com chaves estrangeiras para múltiplas tabelas

Você tem três tabelas: regiões, países e estados. Países e estados podem pertencer a regiões, formando uma estrutura hierárquica. Agora, você deseja criar uma tabela "popular_areas" com as colunas "region_id" e "popular_place_id" e estabelecer um relacionamento de chave estrangeira entre "popular_place_id" e países ou estados com base em uma coluna "popular_place_type".

Isso Este cenário apresenta um desafio porque as restrições de chave estrangeira SQL normalmente fazem referência a uma única tabela de destino. No entanto, existe um conceito conhecido como Associações Polimórficas no design de banco de dados que tenta resolver isso. uma chave estrangeira para se referir a uma das várias tabelas de destino possíveis. Isto é conseguido usando uma coluna adicional para especificar a tabela de destino que está sendo referenciada. Por exemplo, no seu caso, você precisaria de uma coluna "popular_place_type" para determinar se o "popular_place_id" está referenciando um país ou um estado.

No entanto, associações polimórficas têm limitações no SQL devido a restrições. O SQL não pode impor a consistência do banco de dados com associações polimórficas. Em vez disso, ele depende do aplicativo ou estrutura que implementa essas associações para garantir a integridade dos dados.

Soluções alternativas para referências de chave estrangeira para múltiplas tabelas

Para manter a integridade referencial sem polimórfica Associações, considere estas alternativas:

Criando tabelas separadas:

Estabeleça tabelas como "popular_states" e "popular_countries", cada um referenciando estados e países, respectivamente. Isso fornece integridade de dados por meio de restrições SQL, mas pode exigir várias consultas para recuperar todos os locais populares associados a um usuário.

    Criando uma tabela pai:
  • Crie uma tabela de "locais" que atue como um supertipo para estados e países. Tanto os estados quanto os países teriam chaves estrangeiras referenciando "locais", garantindo a integridade referencial.
  • Usando duas colunas:
  • Em vez de uma única coluna referenciando estados ou países, use duas colunas anuláveis: " state_id" e "country_id." No entanto, você deve garantir que apenas uma dessas colunas não seja NULL e impor essa restrição por meio da lógica do aplicativo ou de gatilhos de banco de dados.
  • Integridade relacional e violação de formulários normais
  • É importante observar que as associações polimórficas violam os princípios de normalização do banco de dados. A Primeira Forma Normal (1NF) proíbe misturar significados diferentes em uma única coluna, o que ocorre ao armazenar IDs de estado e país em uma única coluna "popular_place_id". As associações polimórficas também violam a terceira forma normal (3NF) porque o significado da coluna "popular_place_id" depende da coluna adicional "popular_place_type".

Em resumo, as associações polimórficas oferecem uma solução potencial para relacionamentos de chave estrangeira para múltiplas tabelas em SQL. No entanto, introduzem desafios à integridade dos dados e violam os princípios de normalização de bases de dados. Considere abordagens alternativas mencionadas acima para um gerenciamento robusto de dados.

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