从一对多关系构造对象

时间:2014-01-23 02:07:27

标签: database graph entity-relationship nodes data-modeling

上下文

我正在为用于执行任务的基于节点的系统设计数据模型。该系统包括节点,插件和边缘对象。

  • 节点是执行操作的对象。您可以将节点视为程序或可执行文件。可以通过从其他节点传递的数据来改变节点的功能。

  • 数据通过连接从一个节点传递到另一个节点。两个节点之间的连接称为边缘。

  • 使用插头连接节点。每个节点都有一个插件列表,用于确定节点的输入和输出。您可以将插件视为程序或可执行文件的参数。

节点和插头之间的关系是一对多的关系。因此,一个节点可以有很多插头,但插头只能有一个节点。在这种情况下,我将在每个插件上存储对节点的引用。边缘实际上只是两个插头之间的关联。下面是我想象数据的存储示例:

节点表:

|-------------|-----|-------|
| 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   |
|-------------|-----|-------|----------|----------|

问题

假设这并非完全错误,我的问题是如何从数据构造节点对象。在我看来,没有与之关联的插头,节点就没用了。这表明我们必须在创建节点时找到与节点关联的所有插件。这些信息通常存储在何处以及如何存储?换句话说,用于创建节点的过程如何知道对相关插头进行查询?

非常感谢所有建议。

1 个答案:

答案 0 :(得分:0)

听起来插件是节点的子节点,并且在创建节点之前不能存在,除非Plug的Node属性可以为null。在这种情况下,您可以将一个或多个边传递给Node创建者,并且节点插件将是来自它们的不同目标插件集。

话虽如此,在您的示例中,似乎首先创建插头,然后是边缘,然后是节点。我认为首先会创建执行动作(节点)的对象并指示它需要的目标插件。边缘将在最后定义,并且在应用程序的生命周期中将更加可变,因为创建了不同的连接。定义和创建节点及其相关插件一起感觉更自然。

我不确定我是否理解Edge表的ID列或其与PRIMARY_KEY的关系或另一个对象的ID。