【问题标题】:Constructing objects from a one-to-many relationships从一对多关系构造对象
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-09-14
    • 2020-12-17
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多