如何在UML中描述表拓扑?

如何在UML中描述表拓扑?,uml,Uml,我有3个表A(A1、A2、A3)、B和C(A1-A3是表A的属性)。A1是多路复用器。如果A1为1,A2将索引表B,如果A1为0,A3将索引表C 我们能用UML描述这个拓扑吗?如果没有,我还可以使用什么工具来描述拓扑 谢谢 您可以使用事件驱动的流程链(en.wikipedia.org/wiki/event-driven_process_chain)进行此操作。此图用于建模过程。否则,您可以查看状态图(en.wikipedia.org/wiki/state_diagram_(UML)),但我不认为

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

我们能用UML描述这个拓扑吗?如果没有,我还可以使用什么工具来描述拓扑


谢谢

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

您有一个泛化-专业化关系,在类图中,它在实体-关系模型中称为“is-a”关系

..............................................
............................+------------+....
........................+---+     B      |....
........................|...+------------+....
..................../|..|.....................
..+------------+.../.|..|...+------------+....
..|     A      +--<..+--+---+     C      |....
..+------------+...\.|..|...+------------+....
....................\|..|.....................
........................|...+------------+....
........................+---+     D      |....
............................+------------+....
..............................................
注意,这有几个变体,包括在建模和编程中,例如所有记录都有相同的键域(A1),而不是相同类型的不同标识符


干杯。

这个问题似乎离题了,因为它属于数据库,而不是数据库。这就像一个程序序列。当我们得到表A的条目时,我们查看该条目的字段A1/A2/A3。如果A1为1,我们将使用A2作为索引来查找表B中的相应条目。如果A1为0,我们将使用A3作为索引来查找表C中的条目。我们有很多表。所以我想找到一个好的方法来描述它。谢谢!是否有生成事件驱动流程链的工具?生成的文件能否用于进一步处理?(例如,使用脚本处理生成的文件)例如,请尝试Microsoft VISIO(价格昂贵)。或者说(免费而且非常聪明)。谢谢是否有一个工具可以像您那样生成第二个图形?@user3084213“虽然有时我会手工编辑。您可能希望将我的回答标记为ok,单击箭头;-)
..................................................
..........................{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]      |............|    ...     |....
..+----------------+............+------------+....
..................................................
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;
}