【发布时间】:2014-02-13 09:35:11
【问题描述】:
上下文
我正在为用于执行任务的基于节点的系统设计数据模型。该系统包括节点、插头和边缘对象。
-
节点是执行动作的对象。您可以将节点视为程序或可执行文件。节点的功能可以通过从其他节点传递的数据来改变。
-
数据通过连接从一个节点传递到另一个节点。两个节点之间的连接称为边。
-
节点使用插头连接。每个节点都有一个插头列表,用于确定节点的输入和输出。您可以将插件视为程序或可执行文件的参数。
节点和插头之间的关系是一对多的关系。所以一个节点可以有很多插头,但一个插头只能有一个节点。在这种情况下,我将在每个插件上存储对节点的引用。边缘实际上只是两个插头之间的关联。以下是我想象的数据存储方式的示例:
节点表:
|-------------|-----|--------| | PRIMARY_KEY |身份证 |类型 | |-------------|-----|--------| |节点1 | 1 |节点 | |-------------|-----|--------| |节点2 | 2 |节点 | |-------------|-----|--------|插头表:
|-------------|-----|--------|---------| | PRIMARY_KEY |身份证 |类型 |节点 | |-------------|-----|--------|---------| |插件1 | 1 |插头 |节点1 | |-------------|-----|--------|---------| |插件2 | 2 |插头 |节点2 | |-------------|-----|--------|---------| |插件3 | 3 |插头 |节点2 | |-------------|-----|--------|---------|边桌:
|-------------|-----|--------|----------|---------- | | PRIMARY_KEY |身份证 |类型 | SRC_PLUG | DST_PLUG | |-------------|-----|--------|----------|---------- | | EDGE.1 | 1 |边缘 |插件1 |插件2 | |-------------|-----|--------|----------|---------- | |边缘.2 | 1 |边缘 |插件1 |插件3 | |-------------|-----|--------|----------|---------- |问题
假设这不是完全错误的,我的问题是关于如何从数据中构造一个节点对象。在我看来,如果没有与之关联的插头,节点将毫无用处。这表明我们必须在创建节点时找到与该节点关联的所有插头。这些信息通常存储在哪里以及如何存储?换句话说,用于创建节点的进程如何知道要查询关联的插头?
非常感谢所有建议。
【问题讨论】:
-
在您的示例数据中,同一条边 (EDGE.1) 链接了两对插头。这是故意的吗?这些边也是有向的吗?
-
谢谢!我现在已经修好了边桌。两个节点之间有两条边,但边连接不同的插头。此外,边是定向的——数据从源插头传递到目标插头。我一直在做一些调查,似乎我需要研究对象关系映射(ORM)。知道任何好的资源/参考吗?我对这与物理数据模型的关系特别感兴趣。
-
ORM 的选择取决于编程语言。使用 ORM 是一件好事。但是,如果这是一个范围有限的孤立工作,那么 ORM 的开销可能会太大。在这种情况下,只编写自己的代码可能是更好的方法。
标签: database graph entity-relationship nodes data-modeling