Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 关于数据采集管理系统的建议_Database_Database Design_Web Applications - Fatal编程技术网

Database 关于数据采集管理系统的建议

Database 关于数据采集管理系统的建议,database,database-design,web-applications,Database,Database Design,Web Applications,我正在研究一项涉及相当复杂的数据捕获和管理站点的潜在工作,我想知道如何最好地处理它。我将使用一个灯具架构 后端将涉及: 通过用户上传的csv文件进行大量用户创建-我以前做过,所以我对这部分很有信心 一旦注册,用户将定期提交机密信息。虽然数据是保密的,但我只是计划将其存储在MySQL数据库中,定期备份 将涉及不同的角色: 管理员,负责监控用户活动并在需要时创建新角色和用户帐户 最终用户——他们只是通过表单提供信息,能够编辑他们的个人资料、查看以前提交的资料和其他类似的基本信息 管理用户—可以对数

我正在研究一项涉及相当复杂的数据捕获和管理站点的潜在工作,我想知道如何最好地处理它。我将使用一个灯具架构

后端将涉及:

通过用户上传的csv文件进行大量用户创建-我以前做过,所以我对这部分很有信心

一旦注册,用户将定期提交机密信息。虽然数据是保密的,但我只是计划将其存储在MySQL数据库中,定期备份

将涉及不同的角色:

  • 管理员,负责监控用户活动并在需要时创建新角色和用户帐户

  • 最终用户——他们只是通过表单提供信息,能够编辑他们的个人资料、查看以前提交的资料和其他类似的基本信息

  • 管理用户—可以对数据运行一系列预定义报告并在浏览器中显示此信息的用户。他们还可以在计算机上执行“自由形式查询” 数据以及将选定结果提取为电子表格。其中一些标准报告也将作为web服务/提要提供。自由形式查询部分是
    有点担心,因为我还不知道数据实际上是什么,而且随着时间的推移,新的问题很可能会动态地添加到数据捕获表单中。数据库结构必须灵活以适应这种情况,另外我还必须为自由形式查询提供这种能力,这是我以前从未做过的。有人能提出一个明智的方法吗

还将有某种形式的版本控制,这样,如果用户更新/修改某些数据,更改将被跟踪,以前的记录仍然可用。我将计划将其纳入数据库设计中,这样,就不会更新和覆盖数据库中的数据,而是始终创建一个新记录,“覆盖”的记录只是标记为存档。这样,我想我将始终能够检索实时数据行以及归档行(按日期组织)。这有意义吗


提前感谢您的指点,这比我以前的工作(主要是标准CMS)要复杂一些-我想我知道如何处理上述问题,但如果有经验的开发人员能够提供任何建议,我将不胜感激。

如果您要使用该版本控制系统,我建议您也创建视图,以获取所有活动记录,并使用户界面始终使用视图(查看更改的视图除外),而不是直接访问该表。我还将在表上放置触发器,以确保一条且只有一条记录被标记为活动记录。然后您就有了唯一键和标识PK/FK关系中记录的键(您不希望每次添加另一条记录时都必须更改此键)

或者,如果需要研究更改,只需返回旧数据,就可以设置审计表。如果您需要经常查看历史记录,审计表可能很难查询,因为它们通常没有完整的记录结构,只有新旧值、列名和一些元数据,例如更改发生的时间和更改人

您可能会有一个与组织表完全相同的历史表,其中包含一些额外的列(用于更改的时间、由谁以及新的代理键),并从原始PK中删除自动编号和唯一索引。然后,活动记录都在一个表中,非活动记录在另一个表中(由触发器填充),并且仅当您希望同时查看两组数据时才使用视图


所有这些的关键是使用触发器来填充历史记录,无论您打算在哪里存储它。数据库不仅仅受用户应用程序的影响,因此您需要确保记录对数据库的所有更改,而不仅仅是用户界面所做的更改,否则您的历史记录中会有空白。我不能代表所有数据库,但在SQl Server中,触发器会对每批数据执行一次操作,如果有人在一个查询中更新一组价格,则不要假设触发器会一次执行一条记录来编写触发器。通常,以基于集合的方式编写触发器是至关重要的。循环浏览记录的速度很慢,在一个触发器中,当您循环浏览价格上涨10%的数百万条记录时,可能会使整个系统停止。

感谢您的详细回复。我将使用MySql 5,它支持触发器。我以前没有使用过触发器,但对于这个应用程序来说,它们似乎是处理数据更改的好方法。如果我理解正确,在我的例子中,触发器很可能在更新记录时被激活——只在db端处理一系列db事件,从而减少处理这些事件的PHP应用程序代码。此外,审计表的想法听起来很合理,有额外的列用于记录日期等。