2009-07-22 36 views
3

我想写我的宠物项目的文档。如何记录数据库代码以查看数据库对象之间的依赖关系?

我在我的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_cccc调用f_aaaa和f_bbbb。我将不得不修改文档f_aaaa和f_bbbb

我知道UML描述了关于实体的关系(它这样做,正确???)。 但我想要简单的东西,我不想遵循75小时的训练... 而且我不确定您是否可以在实体和功能之间建立“链接”,如我所愿。

你有什么建议吗?

我在Linux(Fedora)上使用PostgreSQL。如果你建议使用这种工具,它必须与PostgreSQL兼容:-)

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

谢谢

回答

-1

我终于建立一个庞大的HMTL文件。

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

这是一个很大的工作,但它正是我想:-)

+1

在09年手动构建,一定是痛苦的!从某种意义上说,这就是javadoc,sphynx和其他的文档工具,除了解析代码,读取以特定格式定义的注释并为你生成所有的html。遗憾的是postgresql没有这样的内容,但我想你可以在其中一个其他语言我来这里寻找这样的解决方案,但没有看到一个。 – Davos 2017-11-07 01:33:14

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你的功能。

+0

我在哪里可以看到GetCar由GetFastestCar叫什么名字? – 2009-07-22 15:50:08

+0

你不知道。你可以有一个名为CAR的类,其中GetCar和GetFastesCar是函数,每个函数都调用一个DB类来检索信息。当然,GetFAstesCar可以是GetCar的一个孩子,但是我们正在谈论OO和继承。如果你想映射类,那么你需要学习UML。 – Steven 2009-07-22 22:21:50

2

我不记录以查看依赖关系。文档自动过时。

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

+0

这对于一个宠物项目来说有点贵:-)没有PostgreSQL的版本:-( – 2009-07-22 20:09:12

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文档中找到。

0

考虑使用一个命名约定,以加强SQL对象相关性:

表1

表2

vw_table1_byField1

vw_table1_byField1_table2

vw_table2

fn_tabl E1

fn_table1_table2

+3

恕我直言,这真是一个糟糕的主意,函数名必须表达他们所做的而不是函数的用途 – 2009-08-20 13:22:06

+0

是的,我可以看到,他正在询问关于文档的知识,并且可以使用命名约定来处理它的作用和依赖。 – Beth 2009-08-20 14:42:50