Можно ли использовать внешние ключи Mysql в таблицах InnoDB для обратного поиска? - PullRequest
4 голосов
/ 29 июня 2009

Интересно, можно ли использовать FK в Mysql (InnoDB) для обратного просмотра.

Причина - я хочу прочитать XML-подобную структуру из БД (используя одну таблицу на «слой»), но иметь возможность делать это динамически. Я хочу иметь возможность обновить структуру XML, добавив новую таблицу и установив ограничение FK.

Для пояснения, скажем, у нас есть таблица "parent" с и id (parent_id) и два других столбца (k1 и k2). XML будет выглядеть (без идентификатора):

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

Теперь мы добавляем дочернюю таблицу с внешним ключом, ссылающимся на parent_id, и еще одним столбцом (ck1). Тот же запрос (с некоторой последующей обработкой) теперь должен дать:

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

Возможно ли это? «SELECT * FROM parent_table» и установить какой-то параметр, чтобы также возвращать дочерние строки, которые указывают назад с FK?

Большое спасибо! / Victor

1 Ответ

1 голос
/ 30 июня 2009

После прочтения много, один вариант будет использовать что-то вроде:

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

Это дает все таблицы, имеющие детей. Конечно, фильтрация для возврата только потомков запрошенному родителю будет простой. Однако, с другой стороны, потребуется дополнительный запрос (и обработка) выше.

Я бы все еще хотел бы найти "лучшее" решение, но это может быть, по крайней мере, началом;)

...