管理/处理几个单独的表格

时间:2012-10-09 15:37:59

标签: php forms crud

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

现在,每个表单都会单独处理,并进入每个申请表的专用MySQL表。如此可怕,每个应用程序都有一个单独的CRUD代码。我希望顺从经验丰富的人如何最好地处理这种情况。

我考虑过将表单元素解析为CSV。我定义了一个标识元素的模式,以便CRUD可以轻松地在一个表上工作。然而,这是一个问题,因为有时这些形式元素会发生变化,这会使一切变得井井有条。我还想要有一个带有标准元素的基本表单,那么需要不同元素的表单将存储在其他地方并带有一些FK。

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

TLDR; 如何在数据库中最好地管理处理/存储多个独特/相当大(20个元素)的表单并在其上实现CRUD。

感谢您的时间。

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

1 个答案:

答案 0 :(得分: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)
};

这里的技巧是拥有一个通用的水合功能,可以将任何提交转换为有用的PHP对象或数组(无论你喜欢哪个)。

由于您的数据库只处理字符串,因此您的验证功能需要完成任务,即知道什么是有效提交,哪些不是。您将无法依赖数据库来拒绝无效数据。

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