Mysql 数据库中的嵌套表

Mysql 数据库中的嵌套表,mysql,database,mariadb,nested-table,Mysql,Database,Mariadb,Nested Table,我正在从事一个项目,该项目有多个流程,每个流程都有不同的数据项要处理。数据项(对于不同的进程)具有不同的列(但对于相同的进程总是相同的列) 首先,我假设为所有流程创建一个表是可以的,然后,每当创建一个新流程时,也可以创建另一个包含项数据的表,但事实证明,有一种新的流程方式可以经常创建新表。然后我研究了嵌套表,但发现MySQL中并没有嵌套表的概念。(我听说这可以用MariaDB来完成。有人用过吗?) 更清楚一点的是当前的概念(这里的列和值只是使概念更清楚的近似值): 工艺参数表: ID | pro

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

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

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

工艺参数表:

ID | process_name | item_id | ...
---------------------------------
1  | some_process | 111     | ...    
2  | other_process| 222     | ...    
3  | third_process| 333     | ...    
4  | third_process| 444     | ...
...
项目u表:

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_表,对于每个流程,它需要有不同的列名,并且在item表中,特定的项目将链接到流程表中的“item_id”列

我认为最简单的解决方案(当一直创建新表时不是一个选项)是嵌套表,其中,在流程表中,可能有另一列,它将保存item_表的值,然后这些列可以根据流程本身具有不同的列

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

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

例如:

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

是否使用items表中的值进行处理或类似的操作(是否对其运行查询)

此表/数据库结构看起来。。效率低下且无法维护

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

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

id |过程| id |数据

编辑: 您的编辑和第二个解决方案应该是正确的选择。
“易读性”的优先级不高于功能和性能。

您是否考虑过将数据标准化,或在items表中为每个可能的列指定一列?也就是说,只需输入Col1 | col2 | col3 | col4,然后只填充您需要的?这是一种错误的数据规范化,将来会给您带来很多问题。如果需要不同的列名,那么最好像示例中那样为每个ID编写一个JSON对象。MySQL现在有原生JSON支持,所以阅读会很容易。@mitkosoft很棒,谢谢,没有意识到MySQL现在有JSON支持。json/blob/varchar字段同样低效且无法维护;最好将任何列存储为列。谢谢,我将查看MySQL对JSON的支持。整个问题源于这样一个事实:不可能规范化列名(可以规范化列的数量,但前提是某些进程只使用很少的列而将其余的列保留为空)@JeffUK True,但这取决于您是否将值用于任何查询或数据库操作,或者仅“存储”流程信息,那么这将提供更大的灵活性,以防未来流程列的数量发生变化,或者我认为您希望存储更多的信息?我注意到添加了“已回答问题”引用,这确实是更有效的方法。