2011-05-02 34 views
0

我正在使用可以基于数据库创建数据仓库的脚本。为了确定所有的集线器,我需要一个查询给我链接表的名字(多对多)。信息架构,如何检索链接表

什么是做到这一点的最好办法:

找到代理键还是我来分析,他们来自哪里,他们去了关系?

感谢您在afvanced

回答

1

在一个多到很多,你可以外键的存在数。你不能指望代理键的存在。

最起码,我想你会需要确定有

  • 表无论是复合主键或
  • 复合唯一约束

有至少两个一起对其他表具有外键引用的列。

如果您的平台支持information_schema视图,则可能需要查看其中的一个或多个视图。

  • information_schema.key_column_usage
  • information_schema.referential_constraints
  • information_schema.table_constraints

我想这会给你在PostgreSQL的复合主键的表。可能会帮助你开始。

select t.constraint_name, t.table_name, count(*) num_key_columns 
from information_schema.table_constraints t 
inner join information_schema.key_column_usage k 
    on (t.constraint_name = k.constraint_name) 
where t.constraint_type = 'PRIMARY KEY' or t.constraint_type = 'UNIQUE' 
group by t.constraint_name, t.table_name 
having count(*) >= 2; 

(如果我这样做,我会创建一个从该查询视图。另为外键引用。加入他们应该是死的简单。)