如何在一个表中存储不同的报告(MySQL+;PHP)

如何在一个表中存储不同的报告(MySQL+;PHP),php,mysql,Php,Mysql,现在我想开发报告应用程序。所以管理员可以从报表设计创建,员工将填写表单 报表由管理员创建,每次都是唯一的。管理员要求的报告由工作人员填写。但我想把员工提供的信息放在同一张表中。我不想为每个报表创建一个新的MySQL表。例如: 表1: 用户名 填充日期时间 你在干什么 新专栏 安德鲁 2021-01-15-15:00 市场营销 新数据 约翰逊 2021-01-15-15:00 饮用水 新数据2 当然,您可以使用文本类型在表行中存储对象或数组类型值,并在使用它们时将它们解析为可读的对象或数组 CRE

现在我想开发报告应用程序。所以管理员可以从报表设计创建,员工将填写表单

报表由管理员创建,每次都是唯一的。管理员要求的报告由工作人员填写。但我想把员工提供的信息放在同一张表中。我不想为每个报表创建一个新的MySQL表。例如:

表1:

用户名 填充日期时间 你在干什么 新专栏 安德鲁 2021-01-15-15:00 市场营销 新数据 约翰逊 2021-01-15-15:00 饮用水 新数据2
当然,您可以使用文本类型在表行中存储对象或数组类型值,并在使用它们时将它们解析为可读的对象或数组

CREATE TABLE `templates` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `stringified_value` text COLLATE utf8mb4_unicode_ci NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
但我的建议如下。 最好有一个表(模板)来标识模板类型(表1、表2)。和另一个表(template_data),该表包含任何模板类型的所有行。 然后,template_数据表应该有一个列(template_id),说明如何基于从template_id引用的模板解析该行

CREATE TABLE `templates` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `columns` text COLLATE utf8mb4_unicode_ci NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE `template_data` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `template_id` bigint(20) UNSIGNED NOT NULL,
  `values` text COLLATE utf8mb4_unicode_ci NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
如您所见,templates表中的列和template_数据表中的值仍然是文本类型(实际值可以是逗号分隔的字符串),但它们可以很容易地解析到数组中


这只是我的想法

您在问题中描述的内容与RDBMS原则不符。如果您想在数据库中保存非结构化数据,请查看以下任何选项: