数据库中的嵌套表

Nested tables in database

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

起初,我假设所有进程都有一个 table 就可以了,然后,每当创建一个新进程时,另一个带有项目数据的 table 可能是也创建了,但事实证明,会有一种新的处理方式来经常创建新的 tables。然后我查看了嵌套 tables,但发现 MySQL 中没有嵌套 tables 的概念。 (我听说这可以用 MariaDB 来完成。有人用过吗?)

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

process_table:

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

item_tables:

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并且对于每个进程,它需要有不同的列名,并且在项目table中,特定项目将被链接到'item_id' 进程中的列 table。

我认为最简单的解决方案(始终创建新的 tables 不是一种选择)是嵌套 tables,其中,在过程中 table, 可能还有另一列,它将包含 item_table 值,然后这些值可能会根据流程本身具有不同的列。

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

解决方案之一是为'item_table'设置一个table,然后为进程的所有不同值设置一列,即例如,将以 JSON 格式存储,但这会使 table.

更难阅读

例如:

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

您是否使用项目中的值-table 进行处理或类似操作(您是否 运行 查询它们)?

这个 table/database 结构在我看来..效率低下且无法维护。

这一切只需要两个 table 就可以完成。进程 table 和包含进程 table.

中的 process_id(不是名称)的项目 table

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

id | process_id | data

编辑: 您的编辑和第二个解决方案应该是可行的方法。 "easy readability" 没有优先于功能和性能的优先级。