2013-12-09 17 views
1

我有3個表A(A1,A2,A3),B和C.(A1-A3是表A的屬性)。 A1是一個多路複用器。如果A1爲1,A2將索引表B,如果A1爲0,則A3將索引表C.如何在UML中描述表格拓撲?

我們可以用UML描述這種拓撲嗎?如果沒有,我可以用什麼其他工具來描述拓撲?

謝謝!

+0

這個問題似乎是脫離主題,因爲它屬於[programmers.se] –

回答

1

爲此,您可以使用事件驅動的流程鏈(en.wikipedia.org/wiki/Event-driven_process_chain)。此圖是爲建模過程製作的。否則,你可以看看狀態圖(en.wikipedia.org/wiki/State_diagram_(UML)),但我不認爲,這是你需要的。事件驅動的流程鏈應完全適合您的需求。

+0

這不是數據庫。這就像一個編程序列。當我們獲得表A的條目時,我們查看該條目的字段A1/A2/A3。如果A1是1,我們將使用A2作爲索引來查找表B中的相應條目。如果A1是0,我們將使用A3作爲索引來查找表C中的條目。我們有很多表。所以我想找一個好的方式來描述它。 – user3084213

+0

我編輯了答案。 – rulebot

+0

謝謝!有沒有一種工具可以生成事件驅動的流程鏈?生成的文件可以用於進一步處理嗎? (例如,使用腳本處理生成的文件) – user3084213

1

您有一個泛化專業化關係,在一個類圖中,它被稱爲實體關係模型中的「IS-A」關係。

.............................................. 
............................+------------+.... 
........................+---+  B  |.... 
........................|...+------------+.... 
..................../|..|..................... 
..+------------+.../.|..|...+------------+.... 
..|  A  +--<..+--+---+  C  |.... 
..+------------+...\.|..|...+------------+.... 
....................\|..|..................... 
........................|...+------------+.... 
........................+---+  D  |.... 
............................+------------+.... 
.............................................. 

請注意,我並沒有把圖中的領域,因爲「如果A1是1種使用B表...」不能直接在U.M.L.描述圖。我會在後面的圖表中圍繞一下。

這可以用圖表來模擬。這些表格可以在數據庫中創建。但是,對輔助表的訪問通常由程序來實現(編碼)。我認爲,有些數據庫支持它,而無需編程。

之前,呈現出小碼,同場相同的圖中,可以是:

.................................................. 
..........................{0,1}.+------------+.... 
........................+-------+  B  |.... 
........................|.......+------------+.... 
........................|.......| [+] A2  |.... 
........................|.......+------------+.... 
........................|.......| ...  |.... 
........................|.......+------------+.... 
........................|......................... 
........................|......................... 
................1.../|..|......................... 
..+------------+.../.|..|.{0,1}.+------------+.... 
..|  A  +--<..+--+-------+  C  |.... 
..+------------+...\.|..|.......+------------+.... 
..| [+] A1  |....\|..|.......| [+] A3  |.... 
..| [+] A2  |........|.......+------------+.... 
..| [+] A3  |........|.......| ...  |.... 
..| [+] A4  |........|.......+------------+.... 
..+------------+........|......................... 
..| ...  |........|......................... 
..+-------+----+........|......................... 
..........|.............|.{0,1}.+------------+.... 
..........|.............+-------+  D  |.... 
..+-------+------\-+............+------------+.... 
..| [When A1=1 \|............| [+] A4  |.... 
..| A2 references \............+------------+.... 
..| table B]  |............| ...  |.... 
..+----------------+............+------------+.... 
.................................................. 

注意,一個U.M.L. 「評論」或U.M.L. 「約束」可以間接指示, 你試圖實現。

因爲,這個論壇的更多相關的節目,不僅僅是圖,相關的C風格的程序就應該像這樣

struct A 
{ 
    int A1;  
    int A2; 
    int A3; 
    int A4; 

    char FirstName[150]; 
    char LastName[150]; 

    // other fields 
}; 

struct B 
{ 
    int A2;  

    // other fields 
}; 

struct C 
{ 
    int A3;  

    // other fields 
}; 

struct D 
{ 
    int A4;  

    // other fields 
}; 

int main(...) 
{ 
    int ErrorCode = 0; 

    A* RecordA = NULL; 
    B* RecordB = NULL; 
    C* RecordC = NULL; 
    D* RecordD = NULL; 

    RecordA = ReadAFromTable(); 

    switch (RecordA->A1) 
    { 
    case 1: 
     RecordB = ReadBFromTable(RecordA->A2); 
    break; 

    case 2: 
     RecordC = ReadCFromTable(RecordA->A3); 
    break; 

    case 3: 
     RecordD = ReadDFromTable(RecordA->A3); 
    break; 
    } 

    // do other stuff 

    return ErrorCode; 
} 

注意,有這樣幾個變化,包括建模&編程,例如對於所有記錄具有相同的關鍵字段(A1),而不是具有相同類型的不同標識符。

乾杯。

+0

謝謝!是否有工具來生成第二個圖形? – user3084213

+1

@ user3084213「http://www.asciiflow.com/#Draw」有時我會用手編輯altought。您可能需要將我的回覆標記爲確定,然後點擊箭頭;-) – umlcat