关系型数据库中难处理的分层数据

Difficult kind of Hierachical Data in Relational Database

提问人:Jos 提问时间:7/9/2014 最后编辑:Jos 更新时间:7/9/2014 访问量:69

问:

我有“组件”,可以以不同的方式组装成一个“系统”。我希望我的数据库能够保存所有这些“组件”,它们的特定类型数据,并定义它们如何相互连接以形成一个“系统”。

这些系统通常是齿轮箱,它们可以具有相当复杂的分支设计。让我们从一个简单的例子开始:

enter image description here

该系统由质量(水平线)和刚度(垂直线)组成。齿轮和离合器是质量的类型,成对出现。颜色表示由于传动比而产生的不同分支速度。这里有一个(糟糕的)例子,说明我如何存储这个特定插图中的所有内容:

 ID | Type      | Clutch | Ends    | DrivenBy  | NoOfTeeth| Mass | Stiffness
--- | ----      | ------ | ----    | --------- | -------- | ---- | ---------
 1  | Mass      |        | Input1  |           |          | 5    | 
 2  | Stiffness |        |         |           |          |      | 15
 3  | Mass      | 1.1    |         |           |          | 2    |
 4  | Mass      | 1.2    |         |           |          | 3    |
 5  | Stiffness |        |         |           |          |      | 20
 6  | Gear      |        |         |           | 10       | 4    |
 7  | Stiffness |        |         |           |          |      | 30
 8  | Gear      |        |         |           | 4        | 5    |
 9  | Gear      |        |         | 8         | 7        | 2    |
 10 | Stiffness |        |         |           |          |      | 40
 11 | Mass      |        |         |           |          | 4    |
 12 | Stiffness |        | Output1 |           |          |      | 10
 13 | Gear      |        |         | 6         | 5        | 4    |
 14 | Stiffness |        |         |           |          |      | 20
 15 | Mass      | 2.1    |         |           |          | 4    |
 16 | Mass      | 2.2    |         |           |          | 3
 17 | Stiffness |        |         |           |          |      | 30
 18 | Mass      |        | Output2 |           |          | 2    |

显然,这不是存储数据的好方法。这种设计模式在某种程度上类似于“重复属性”,因为每种组件类型都有不同的属性要填充。我可以为每种类型的组件创建一个表格,但是当查看其他示例时,事情变得更加复杂,例如这个 2 级变速箱:

enter image description here

也有超过 1 个输入和多个输出的例子,但由于声誉低,我无法发布更多链接。

无论哪种方式,您都会看到通常的分层数据存储在这里不适用,因为数据不是纯粹的“树形”,其中所有内容都从 1 个主分支分支出来。

我认为,即使我可以以上述方式存储数据,但在编程阶段也会遇到巨大的困难。

更复杂的是,这些变速箱实际上是一个更大系统的子系统。

那么,关于存储此类数据的好方法有什么建议吗?

设计 关系型数据库

评论

0赞 Mike Sherrill 'Cat Recall' 7/9/2014
在您的第一张图中,是有 3 个变速箱还是只有 1 个?
0赞 Jos 7/9/2014
有 1 个变速箱,但有 2 对齿轮,总共 4 个齿轮。图中的其他部分是离合器和轴。
0赞 Mike Sherrill 'Cat Recall' 7/9/2014
3种颜色是什么意思?
0赞 Jos 7/9/2014
@MikeSherrill'CatRecall' 从问题中:由于传动比,颜色代表不同的分支速度。为了进一步解释,它们可以被视为“分支”。
0赞 Mike Sherrill 'Cat Recall' 7/9/2014
嗯,呃。需要更多的茶。

答:

0赞 Jos 7/9/2014 #1

也许这是一种可能的方法?

enter image description here

在这里,您将看到有一个名为 GearboxBranch 的“主”表,用于跟踪变速箱中的所有元素,为它们提供一个 id 并确定该元素存在于哪个分支中。

然后,对于单元本身,质量在其专用表中定义,刚度也是如此。然后,齿轮和离合器(质量类型)在其透视表中定义。齿轮表中存在递归关系,因为一个齿轮必须由至少一个其他齿轮驱动。

此外,带有轴端的表格定义了齿轮箱中的哪些元件是输入或输出,以及它们的数量。

我似乎看不出这种方法有任何问题,但我有点不确定如何从数据库中获取数据。恐怕会涉及相当多的编码。