我怎样才能找出哪个 table 外键引用?

How can I find out which table a foreign key references?

我有一个没有文档的数据库。

有一个 table,它有一个列 language_id,它是另一个 table 的外键。我想知道外键引用了哪个 table 。我不想仅仅通过观察所有 table 来找出答案,因为大约有 120 个 table,不幸的是,这些名称没有描述性。

有办法找到吗?

我正在使用 SQL Developer 来查询远程 Oracle 11g 数据库。

你可以查询数据字典,像这样:

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),找到匹配的 primary/unique 键,并匹配来自两个 table 的列。当然,您可以将其限制为特定的 table、列或约束,但如果您试图找到所有映射,则更广泛的视图可能会有用。

如果我创建一个虚拟 parent/child 关系,使用未命名的约束(这可能是您所说的名称没有描述性的意思):

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 中,您还可以打开 table 查看器(从您连接下的扩展 table 列表中,在左侧面板中);初始视图显示 table 列,但如果您单击“约束”选项卡,它会显示相同的信息 - 以及更多关于约束的信息。不过,这一次只会显示一个 table。

您说您正在使用 SQL 开发人员。

所以,只需打开 table。

转到限制页面。

找到你的外键。

查看 R_TABLE_NAME 列。