我有3个表A(A1,A2,A3),B和C.(A1-A3是表A的属性)。 A1是多路复用器。如果A1为1,则A2将索引表B,如果A1为0,则A3将索引表C.
我们可以用UML描述这种拓扑吗?如果没有,我可以用什么其他工具来描述拓扑?
谢谢!
答案 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),而不是具有相同类型的不同标识符。
干杯。