1

我正在做一个项目,该项目有多个流程,每个流程都有不同的数据项要处理。数据项(对于不同的进程)具有不同的列(但对于同一进程总是相同的列)。

起初,我认为为所有流程创建一个表就可以了,然后,每当创建一个新流程时,也可以创建另一个包含项目数据的表,但事实证明,会有一种经常创建新表的新流程方式。然后我正在研究嵌套表,但发现 MySQL 中没有嵌套表的概念。(我听说这可以用 MariaDB 完成。有人用过吗?)

为了更清楚一点,这里是当前的概念(这里的列和值只是为了使概念更清晰的近似值):

进程表:

ID | process_name | item_id | ...
---------------------------------
1  | some_process | 111     | ...    
2  | other_process| 222     | ...    
3  | third_process| 333     | ...    
4  | third_process| 444     | ...
...

项目表:

item_table_1:
ID | Column1 | Column2 | process_name | ...
--------------------------------------
111| val1    | val2    | some_process | ...
...

item_table_2:
ID | Column4 | Column5 | process_name | ...
--------------------------------------
333| val1    | val2    | third_process| ...
444| val3    | val4    | third_process| ...
...

因此,对于每个新流程,都会有新的 item_table 并且对于每个流程,它需要具有不同的列名,并且在项目表中,特定项目将链接到流程表中的“item_id”列。

我认为最简单的解决方案(始终创建新表时不是一个选项)是嵌套表,其中,在进程表中,可能有另一列,它将保存 item_table 值,然后那些可能有基于流程本身的不同列。

所以最大的问题是:是否至少有任何类似于嵌套表或 MySQL 中的其他任何东西可以帮助我实现这样的结构而无需一直创建新表,如果没有,那么也许有一些关于 MariaDB 的提示或评论? 也许有人已经用它实现了嵌套表(如果可能的话)

一种解决方案是为“item_table”设置一个表,然后为进程的所有不同值设置一个列,例如以 JSON 格式存储,但这会使读取表变得更加困难.

例如:

item_table:
ID | process_name | data
--------------------------------------
111| some_process | {values: {column1:val1,column2:val2,...}}
4

1 回答 1

1

您是否使用 items-table 中的值进行处理或类似的东西(您是否对它们运行查询)?

这个表/数据库结构看起来.. imo 效率低且不可维护。

这一切都应该只用两张桌子来完成。进程表和包含进程表中的process_id(不是名称)的项目表。

如果项目的列数始终相同,只需对值使用“通用”名称,例如 value_1、value_2(或任何最适合该流程的名称)或带有 JSON 字符串的 json/blob/varchar 字段。(取决于您是否需要对此数据运行查询)

id | process_id | data

编辑: 您的编辑和第二个解决方案应该是要走的路。“易读性”不优先于功能和性能。

于 2020-01-21T09:17:10.690 回答