Asp.net 包含永远不会删除或更改的数据的表
这是对我昨天提出的关于存储历史数据()的问题的更深入的跟进,我正试图缩小我的问题范围 如果您有一个在应用程序级别表示数据对象的表,并且出于历史目的需要该表,则将其设置为无法删除信息的位置被视为不好的做法。基本上,我有一个代表工人安全要求的表格,我想这样做,这些要求永远不能被删除或更改。因此,如果需要进行更改,将创建一个新记录 这不是个好主意吗?处理此类数据的最佳实践是什么?我有一个包含历史安全培训数据的表,它指向包含需求数据的表(以及其他一些关键表),因此我不能让需求被更改,否则历史表将指向错误的信息 这不是个好主意吗 你的设想对我来说完全正确。如果您有需要保存的历史数据,有多种方法可以满足该要求 选项1: 将所有历史数据和当前数据存储在一个表中(确保存储了创建日期,以便了解旧数据和新数据)。当您需要检索某人的最新记录时,只需基于表中存在的最新日期即可 选项2:Asp.net 包含永远不会删除或更改的数据的表,asp.net,sql,sql-server,database,database-design,Asp.net,Sql,Sql Server,Database,Database Design,这是对我昨天提出的关于存储历史数据()的问题的更深入的跟进,我正试图缩小我的问题范围 如果您有一个在应用程序级别表示数据对象的表,并且出于历史目的需要该表,则将其设置为无法删除信息的位置被视为不好的做法。基本上,我有一个代表工人安全要求的表格,我想这样做,这些要求永远不能被删除或更改。因此,如果需要进行更改,将创建一个新记录 这不是个好主意吗?处理此类数据的最佳实践是什么?我有一个包含历史安全培训数据的表,它指向包含需求数据的表(以及其他一些关键表),因此我不能让需求被更改,否则历史表将指向错误
将所有历史数据存储在单独的表中,并将当前数据保存在另一个表中。如果您正在处理数百万条记录,这样就不会降低在此基础上构建的任何应用程序的性能,这可能是有益的。无论是在创建新记录时,还是通过夜间作业,您都可以将旧数据移动到另一个表中,以保持当前表的轻量级。这里有一个替代方案,它不一定“更好”,但需要记住 您可以有单独的“活动”表和“历史”表,然后创建一个触发器,这样每当修改或删除活动表中的一行时,旧的行值连同时间戳一起复制到历史表中 这样,应用程序可以自然地处理活动表,同时在历史表中自动生成准确的更改历史。由于这在DBMS级别工作,您将更能抵抗应用程序错误
当然,如果需要维护整个对象图(即通过外键链接的多个表)的历史记录,事情可能会变得更加混乱。可能最简单的选择是放弃历史表的引用完整性,而只保留活动表的引用完整性
如果这还不足以满足项目的需要,那么您必须以某种方式表示整个图形在更改时的“快照”。一种方法是将连接也视为版本化对象。或者,您可以只复制端点对象的每个版本的所有连接。任何一种情况都会使您的逻辑大大复杂化。我认为选项2接近我所需要的,但我很难理解外键和约束需要做什么。为了进一步澄清这个问题,我有一个员工表,一个需求表,一个行动表。操作分配给需求,需求分配给员工,员工完成操作。所以我需要一个额外的表来容纳所有3个人,这就是你所说的吗?我想这取决于你想做什么。仅出于历史目的复制其他表(employee和action)似乎是多余的(除非您也有这些表的历史详细信息,但听起来好像没有)。我只需要保留需求的历史记录,并放弃对历史数据执行外键。即使没有适当的外键强制,也可以始终将其连接到其他表(如果出于某种原因需要关联数据)。