我正在为用于执行任务的基于节点的系统设计数据模型。该系统包括节点,插件和边缘对象。
节点是执行操作的对象。您可以将节点视为程序或可执行文件。可以通过从其他节点传递的数据来改变节点的功能。
数据通过连接从一个节点传递到另一个节点。两个节点之间的连接称为边缘。
使用插头连接节点。每个节点都有一个插件列表,用于确定节点的输入和输出。您可以将插件视为程序或可执行文件的参数。
节点和插头之间的关系是一对多的关系。因此,一个节点可以有很多插头,但插头只能有一个节点。在这种情况下,我将在每个插件上存储对节点的引用。边缘实际上只是两个插头之间的关联。下面是我想象数据的存储示例:
节点表:
|-------------|-----|-------| | PRIMARY_KEY | ID | TYPE | |-------------|-----|-------| | NODE.1 | 1 | NODE | |-------------|-----|-------| | NODE.2 | 2 | NODE | |-------------|-----|-------|
插件表:
|-------------|-----|-------|---------| | PRIMARY_KEY | ID | TYPE | NODE | |-------------|-----|-------|---------| | PLUG.1 | 1 | PLUG | NODE.1 | |-------------|-----|-------|---------| | PLUG.2 | 2 | PLUG | NODE.2 | |-------------|-----|-------|---------| | PLUG.3 | 3 | PLUG | NODE.2 | |-------------|-----|-------|---------|
边缘表:
|-------------|-----|-------|----------|----------| | PRIMARY_KEY | ID | TYPE | SRC_PLUG | DST_PLUG | |-------------|-----|-------|----------|----------| | EDGE.1 | 1 | EDGE | PLUG.1 | PLUG.2 | |-------------|-----|-------|----------|----------| | EDGE.2 | 1 | EDGE | PLUG.1 | PLUG.3 | |-------------|-----|-------|----------|----------|
假设这并非完全错误,我的问题是如何从数据构造节点对象。在我看来,没有与之关联的插头,节点就没用了。这表明我们必须在创建节点时找到与节点关联的所有插件。这些信息通常存储在何处以及如何存储?换句话说,用于创建节点的过程如何知道对相关插头进行查询?
非常感谢所有建议。
答案 0 :(得分:0)
听起来插件是节点的子节点,并且在创建节点之前不能存在,除非Plug的Node属性可以为null。在这种情况下,您可以将一个或多个边传递给Node创建者,并且节点插件将是来自它们的不同目标插件集。
话虽如此,在您的示例中,似乎首先创建插头,然后是边缘,然后是节点。我认为首先会创建执行动作(节点)的对象并指示它需要的目标插件。边缘将在最后定义,并且在应用程序的生命周期中将更加可变,因为创建了不同的连接。定义和创建节点及其相关插件一起感觉更自然。
我不确定我是否理解Edge表的ID列或其与PRIMARY_KEY的关系或另一个对象的ID。