如何记录数据库代码以查看数据库对象之间的依赖关系?

时间:2009-07-22 15:15:00

标签: database postgresql documentation dependencies

我想在我的宠物项目上写下文档。

我的PostgreSQL数据库中有30个表和近50个视图以及大约30个函数(存储过程)。

我想看看哪些表(使用哪些视图和哪些函数)。

我想看看哪些视图(使用哪些视图和哪些函数)。

我想看看另一个函数是否使用了一个函数。

我还想写一个每个对象(表,视图和函数)的描述

以及字段的简短描述。

很快,我希望能够看到使用特定对象的内容以及使用特定对象的对象。

我想使用文本文件和每个对象。 我可能列出使用当前对象的对象以及当前对象使用的对象。

<pre>
Table aaaa
A short description
used by : view v_aaaa

id  int     primary key
name  varchar(30)   name of a...

================================
view v_aaaa
A short description

list of fields...

used by function f_aaaa
Depends on  table aaaa



==============================

function f_aaaa
A short description
Parameters ( description, IN/OUT )
Depends on view v_aaaa
           function fbbbb 

==============================

function f_bbbb
A short description
Parameters
Called by function f_aaaa

我担心我的文档很快就会不同步 想象一下,我添加了一个调用f_aaaa和f_bbbb的函数f_cccc。我将不得不修改f_aaaa和f_bbbb

上的文档

我知道UML描述了关于实体的关系(它确实如此,对吧???)。 但是我想要一些简单的东西,我不想接受75小时的训练...... 而且我不确定你能否按照我的要求在实体和功能之间建立“链接”。

你有什么建议吗?

我在Linux上使用PostgreSQL(Fedora)。如果你提出一个这样做的工具,它必须与PostgreSQL兼容: - )

对于我的代码文档,我使用Doxygen。

谢谢

5 个答案:

答案 0 :(得分:4)

您实际上可以通过查询数据库的内部“依赖”信息来收集部分信息。如果有什么东西取决于另一个,那表明它使用它。这是一个示例查询,可以让您了解如何遍历所涉及的两个结构:

SELECT
  c1.oid as relid,
  n1.nspname || '.' || c1.relname as relation,
  c1.relkind,
  c2.oid as relid,
  n2.nspname || '.' || c2.relname as dependency,
  c2.relkind
FROM 
  pg_depend d,
  pg_class c1,
  pg_namespace n1,
  pg_class c2,
  pg_namespace n2
WHERE 
  d.objid = c1.oid AND
  c1.relnamespace = n1.oid AND 
  n1.nspname NOT IN('information_schema', 'pg_catalog') AND
  n1.nspname !~ '^pg_toast' AND
  d.refobjid = c2.oid AND
  c2.relnamespace = n2.oid AND 
  n2.nspname NOT IN('information_schema', 'pg_catalog') AND
  n2.nspname !~ '^pg_toast' AND
  c1.oid != c2.oid
GROUP BY n1.nspname,c1.relname,c1.oid,c1.relkind,
  n2.nspname,c2.relname,c2.oid,c2.relkind
ORDER BY n1.nspname,c1.relname;

有关所有这些内部位的信息,请参阅system catalog文档。

答案 1 :(得分:2)

我没有文档以查看依赖项。文档会自动过期。

我使用了一个工具。目前我使用ApexSQL中的产品,但我过去使用过Redgate工具。

答案 2 :(得分:0)

绘制EAR图表。实体 - 关系图。

本教程应该让您对它有一个很好的理解。 http://www.scribd.com/doc/7500847/entity-relationship-diagram

你有这个 http://www.getahead-direct.com/gwentrel.htm

修改

假设你有一张桌面CAR,那么你画一个CAR框:

CAR
----------
id (int)
name (vchar)
numbSeats (int)
----------
GetCar
SetCar
DeleteCar

Thelast 3是你的功能。

答案 3 :(得分:0)

考虑使用命名约定来强化SQL对象依赖性:

表1

表2

vw_table1_byField1

vw_table1_byField1_table2

vw_table2

fn_table1

fn_table1_table2

答案 4 :(得分:-1)

我最终构建了一个巨大的html文件。

文件包含很多锚点,并且很容易导航到不同的对象。

这是很多工作,但它正是我想要的: - )