代码之家  ›  专栏  ›  技术社区  ›  Luc M

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

  •  3
  • Luc M  · 技术社区  · 17 年前

    我想写我的宠物项目的文档。

    我的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
    

    恐怕我的文档很快就会不同步

    我知道UML描述了实体之间的关系(它就是这样做的,对吗?)。 但是我想要一些简单的东西,我不想参加75小时的训练。。。

    你有什么建议吗?

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

    5 回复  |  直到 17 年前
        1
  •  4
  •   Greg Smith    17 年前

    实际上,您可以通过查询数据库的内部“依赖”信息来收集其中一些信息。如果某事物依赖于另一事物,则表明它使用了它。下面是一个示例查询,让您了解如何遍历所涉及的两个结构:

    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 文档

        2
  •  2
  •   John Saunders    17 年前

    我不记录以查看依赖项。文档自动过期。

    ApexSQL ,但我用过 Redgate

        3
  •  0
  •   Steven    17 年前

    只要画一张耳朵图。实体关系图。

    http://www.scribd.com/doc/7500847/entity-relationship-diagram

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

    编辑:

    假设你有一辆tabe车,然后画一辆box车:

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

    最后三个是你的功能。

        4
  •  0
  •   Beth    17 年前

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

    表1

    表2

    vw_表1_按字段1

    vw_表1_byField1_表2

    vw_表2

    fn_表1_表2

        5
  •  -1
  •   Luc M    17 年前

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

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

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