我正在研究涉及相当复杂的数据捕获和管理网站的潜在工作,我想知道如何最好地处理它。我将使用LAMP架构。
后端将涉及:
通过用户上传的csv文件创建大量用户 - 之前我已经完成了这项工作,因此对此部分充满信心。
注册后,用户将定期提交机密信息。虽然数据是保密的,但我只是计划将其存储在MySQL数据库中,该数据库将定期备份。
将涉及不同的角色:
管理员,负责监控用户活动并在需要时创建新角色和用户帐户。
最终用户 - 他们只是通过表单提供信息,能够编辑他们的个人资料,查看以前提交的内容以及其他类似的基本内容
管理用户 - 可以对数据运行一系列预定义报告,并在浏览器中显示此信息。他们也可能会对其进行“自由格式查询”
数据以及将所选结果提取为电子表格。许多这些标准报告也将作为Web服务/提要提供。自由格式查询部分为
稍微有点担心,因为我还不知道数据实际上是什么,而且很有可能随着时间的推移将新问题动态地添加到数据捕获表单中。数据库结构必须灵活适应这一点,而且我必须为自由格式查询提供这种能力,这是我以前从未做过的。任何人都可以建议一个合理的方法吗?
还会有某种形式的版本控制,因此,如果用户更新/修改某些数据,则会跟踪更改并且之前的记录仍然可用。我打算将其合并到数据库设计中,这样就不会更新和覆盖数据库中的数据,而是始终创建一条新记录,“覆盖”的记录只是被标记为已归档。这样,我想我总是能够检索实时数据行,以及存档行(按日期组织)。这有意义吗?
提前感谢任何指针,这比我之前的工作(主要是标准的CMS)要复杂一些 - 我想我知道如何处理上述内容,但是对于任何更有经验的建议都会感激不尽开发商可以提供。
答案 0 :(得分:1)
如果您打算使用该版本控制系统,我建议您还创建视图以获取所有活动的记录,并让用户界面始终使用视图(除了他们正在查看更改的地方)不能直接访问表。我还会在表格上设置一个触发器,以确保只有一条记录被标记为活动。然后你就会遇到唯一键的问题以及识别PK / FK关系中记录的关键(你不想每次添加另一条记录时都要改变它)。
或者,如果您只需要研究更改,则只需要返回旧数据即可设置审核表。如果您需要经常查看历史记录,则审计表很难查询,因为它们通常不会将整个记录结构只包含旧值和新值,列名称和一些元数据,例如更改时和由谁进行更改。
可能你可能有一个历史表,它与区域表完全相同,只有一些额外的列(用于更改的时间以及由谁和新的代理键)以及从原始PK获取自动编号和唯一索引。然后,活动记录都在一个表中,非活动记录在另一个表中(由触发器填充),只有当您想要同时看到两组数据时才使用视图。
所有这一切的关键是使用触发器填充您打算存储它的历史记录。数据库不仅受用户应用程序的影响,因此您需要确保记录对数据库的所有更改,而不仅仅是用户界面所做的更改,否则您的历史记录中将有间隙。我无法代表所有数据库,但在SQl Server中,触发器对每批数据执行一次,如果有人在一个查询中更新了价格,则不要写它们,假设它们一次只能执行一条记录。以基于集合的方式编写触发器通常是至关重要的。循环记录很慢,触发可以使整个系统停止运行,同时循环显示价格上涨10%的百万条记录。