2009-07-22 37 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