É possível usar teclas estrangeiras MySQL em tabelas Innodb para pesquisa inversa?

StackOverflow https://stackoverflow.com/questions/1058934

  •  21-08-2019
  •  | 
  •  

Pergunta

Gostaria de saber se é possível usar os FKs no MySQL (Innodb) para obter uma pesquisa inversa.

A razão - quero ler uma estrutura do tipo XML do banco de dados (usando uma tabela por "camada"), mas ser capaz de fazer isso dinamicamente. Quero poder atualizar a estrutura XML adicionando uma nova tabela e definindo uma restrição de FK.

Para esclarecer, digamos que temos uma tabela "pai" com e id (parent_id) e duas outras colunas (K1 e K2). O XML seria (omitindo id):

<parent>
 <k1>v1</k1>
 <k2>v2</k2>
</parent>

Agora, adicionamos uma tabela infantil com uma chave estrangeira referenciando parent_id e outra coluna (CK1). A mesma consulta (com algum processamento depois) deve agora dar:

<parent>
 <k1>v1</k1>
 <k2>v2</k2>
 <child>
  <ck1>cv1</ck1>
 </child>
</parent>

Isso é possível? Para "selecionar * de parent_table" e definir algum tipo de parâmetro para também devolver as linhas infantis que apontam com um FK?

Muito Obrigado! /Vencedor

Foi útil?

Solução

Depois de ler muito, uma opção seria usar algo como:

SELECT
  referenced_table_name parent,
  table_name child,
FROM
  information_schema.KEY_COLUMN_USAGE
WHERE
  referenced_table_name IS NOT NULL

Isso dá a todas as mesas ter filhos. Filtrar apenas para devolver as crianças ao pai solicitado seria, é claro, fácil. Por outro lado, no entanto, a consulta extra (e o processamento) acima seria necessária.

Eu ainda adoraria obter uma solução "melhor", mas isso pode pelo menos ser um começo;)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top