0

我有一个有趣的问题,我一直在努力简化。我有一个电信客户,他有几个注册表单 - 每个代表一个不同的程序/报价。每个表单本质上是相同的,但有些表单具有其他表单没有的字段。可以想象,这在数据库和 CRUD 代码中都是一场噩梦。

目前,每个表单都被单独处理并进入每个应用程序表单的专用 MySQL 表。可怕的是,每个应用程序都有一个单独的 CRUD 代码。关于如何最好地处理这种情况,我想听从有经验的人的意见。

我考虑将表单元素解析为 CSV。我将定义一个标识元素的排序模式,以便 CRUD 可以轻松地处理一个表。然而,这是一个问题,因为有时这些表单元素会发生变化,这会使所有内容保持井井有条和整洁。我也想拥有一个带有标准元素的基本表单,然后需要不同元素的表单将与一些 FK 一起存储在其他地方。

我真的不知道我能做些什么来让这件事变得更容易。我讨厌有几个表用于应用程序,还有几个 CRUD 用于处理......

TLDR;我怎样才能最好地管理在数据库中处理/存储几个独特/相当大(20 个元素)的表单并在它们上实现 CRUD。

谢谢你的时间。

编辑我也只是考虑实现 JSON 或 XML 来定义表单元素和接受的数据类型。这可以由系统修改,并且在保存后,可以为每个应用程序生成一个缓存的 HTML 表单页面和更新的 SQL 代码。这样,我可以解决编辑问题。但是,基于这个实现,我仍然需要几个表。

4

1 回答 1

1

实现这一点的一种方法是使用一个基表,它只定义所有表单共有的几个字段,包括某种 ID。然后,您有一个单独的表,该表按每个表单的名称和值存储所有其余的表单数据。实际上,您有一个对象编号,然后是表单中每条数据的一组属性名称/值。

CREATE TABLE submission {
    submission_id INT,
    creation_date DATETIME
};

CREATE TABLE submission_attributes {
    submission_id INT,
    attr_name VARCHAR(50),
    attr_value VARCHAR(255)
};

这里的诀窍是拥有一个通用的 hydration 函数,可以将任何提交转换为有用的 PHP 对象或数组(无论您喜欢使用哪个)。

由于您的数据库仅处理字符串,因此您的验证函数需要完成了解什么是有效提交以及什么不是有效提交的任务。您将无法依靠您的数据库来拒绝无效数据。

另一种方法是使用对象数据库。我最喜欢的是MongoDB,它允许您将任意复杂的数据存储为 JSON,甚至可以通过深度嵌套的对象属性进行索引/搜索。但是还有其他工具也可以完成这项工作。

于 2012-10-09T16:39:02.967 回答