关系数据库中的困难类层次数据

时间:2014-07-08 17:34:47

标签: database database-design relational-database

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

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

enter image description here

该系统由Masses(水平线)和Stiffnesses(垂直线)构成。齿轮和离合器是质量类型并且成对出现。由于齿轮比,颜色代表不同的分支速度。这是一个(坏的)示例,说明如何存储此特定插图中的所有内容:

 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 个答案:

答案 0 :(得分:0)

也许这是一种可行的方式吗?

enter image description here

在这里你会看到有一个" main"表名为GearboxBranch,跟踪变速箱中的所有元素,给它们一个id并识别元素存在于哪个分支中。

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

此外,带有轴端的工作台定义了变速箱中的哪些元件是输入或输出的,以及它们具有的数量。

我似乎无法看到此方法存在任何问题,但我有点不确定如何从数据库中获取数据。我担心会有相当多的编码。