如何用UML描述表拓扑?

时间:2013-12-09 19:37:23

标签: uml

我有3个表A(A1,A2,A3),B和C.(A1-A3是表A的属性)。 A1是多路复用器。如果A1为1,则A2将索引表B,如果A1为0,则A3将索引表C.

我们可以用UML描述这种拓扑吗?如果没有,我可以用什么其他工具来描述拓扑?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用事件驱动的流程链(en.wikipedia.org/wiki/Event-driven_process_chain)。该图用于建模过程。否则你可以查看状态图(en.wikipedia.org/wiki/State_diagram_(UML)),但我不认为,这就是你需要的。事件驱动的流程链应该完全符合您的需求。

答案 1 :(得分: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),而不是具有相同类型的不同标识符。

干杯。