2016-05-06 2 views
0

У меня есть база данных без документации.Как узнать, в какой таблице таблицы используется внешний ключ?

Существует таблица, в которой есть столбец language_id, который является внешним ключом к другой таблице. Я хочу знать, в какой таблице ссылки на внешние ключи. Я не хочу, чтобы узнать, просто глядя на все таблицы, потому что есть около 120 таблиц, и имена не являются описательными, к сожалению.

Есть ли способ найти это?

Я использую SQL Developer для запроса удаленной базы данных Oracle 11g.

+1

Возможный дубликат [Как я могу узнать, какие таблицы ссылаются на данную таблицу в Oracle SQL Developer?] (Http://stackoverflow.com/questions/1143728/how-can-i-find-which -tables-reference-a-given-table-in-oracle-sql-developer) – OldProgrammer

+0

Я думаю, что связанный вопрос идет в другую сторону - начиная с родительской таблицы (PK) и поиска таблиц, которые ссылаются (т.е. имеют FK, что ссылается на родителя)? –

ответ

3

Вы говорите, что используете SQL Developer.

Итак, просто откройте стол.

Перейдите на страницу с ограничениями.

Найдите свой внешний ключ.

Посмотрите на столбец R_TABLE_NAME.

enter image description here

3

Вы можете запросить словарь данных, с чем-то вроде:

select uc_r.table_name, ucc_r.column_name, uc_r.constraint_name, 
    uc_p.constraint_name, uc_p.table_name, ucc_p.column_name 
from user_constraints uc_r 
join user_cons_columns ucc_r on ucc_r.constraint_name = uc_r.constraint_name 
join user_constraints uc_p on uc_p.constraint_name = uc_r.r_constraint_name 
join user_cons_columns ucc_p on ucc_p.constraint_name = uc_p.constraint_name 
and ucc_p.position = ucc_r.position 
where uc_r.constraint_type = 'R'; 

, который ищет все внешнего ключа (тип R), находит соответствующий первичный/уникальный ключ, и совпадала столбцы от обоих столы. Вы можете ограничить это конкретными таблицами, столбцами или ограничениями, конечно, но более широкий обзор может быть полезен, если вы пытаетесь найти все ваши сопоставления.

Если создать фиктивный отношения родитель/потомок, используя неназванные ограничения (которые могут быть то, что вы имеете в виду под названиями не является описательным):

create table language (id number primary key, name varchar2(10)); 
create table my_table (language_id references language(id)); 

то, что запрос находит:

TABLE_NAME COLUMN_NAME CONSTRAINT_NAME CONSTRAINT_NAME TABLE_NAME COLUMN_NAME 
----------- ------------- --------------- --------------- ----------- ------------- 
MY_TABLE  LANGUAGE_ID SYS_C00111327 SYS_C00111326 LANGUAGE  ID    

Из SQL Developer вы также можете открыть средство просмотра таблицы (из расширенного списка таблиц под вашим подключением, на панели слева); в начальном представлении показаны столбцы таблицы, но если вы нажмете на вкладке «Ограничения», она покажет вам ту же информацию - плюс много больше об этом ограничении. Это покажет вам только одну таблицу за раз.

Смежные вопросы