Database design 及时保存实体状态

Database design 及时保存实体状态,database-design,Database Design,我们有一个打印系统,它创建一个文档(发票等),然后打印它们。 因为一个文档大约有4kb,所以我们不想实际存储它们。 我们希望及时创建它们,但是用于创建文档的一些变量在以后可能会更改,但是我们仍然需要能够查看文档,就像它是过去的版本一样。例如,如果一家公司更改了银行、地址甚至名称,我们不希望这些更改反映过去的文档 因此,我们正在寻找一种节省空间的解决方案,即在需要查看文档时创建文档 我想出了一些主意 1) 在第一次创建时将所有需要的变量保存到一行中(银行详细信息等),并使用此行创建报告。缺点:大量

我们有一个打印系统,它创建一个文档(发票等),然后打印它们。 因为一个文档大约有4kb,所以我们不想实际存储它们。 我们希望及时创建它们,但是用于创建文档的一些变量在以后可能会更改,但是我们仍然需要能够查看文档,就像它是过去的版本一样。例如,如果一家公司更改了银行、地址甚至名称,我们不希望这些更改反映过去的文档

因此,我们正在寻找一种节省空间的解决方案,即在需要查看文档时创建文档

我想出了一些主意

1) 在第一次创建时将所有需要的变量保存到一行中(银行详细信息等),并使用此行创建报告。缺点:大量重复数据(银行详细信息不经常更改)

2) 像疯了一样进行规范化,并有大约5个额外的表,其中引用了存储在主行中的数据片段。缺点:非常。。。凌乱和大量的工作

3) 及时存储所有历史记录,按日期查找。因此,使用创建日期在某个时间点查找其他表中的变量,只要行发生更改,就创建所有数据的副本。每次有人做出改变,Con仍然会浪费一些数据


有什么想法吗?

准确度和性能需要成为您的主要关注点。存储是第三位

存储所有值以填充文档中的变量(不要忘记包含文档的版本)

或版本所有变量源,并指向文档中使用的每个变量的版本。这实际上是一个缓慢变化的维度


您的最佳选择取决于文档与源数据更改的比率。我的假设是,您拥有的银行文档将远远超过对银行数据的更改。在这种情况下,我认为第二个选项是最具可扩展性的,将具有最好的性能,并且可能长期使用最少的空间。

如果您想存储旧数据,您确实需要使用更多的存储空间。。。如果你需要这样做,这是否是一种“浪费”是一个值得讨论的问题。。。您可以查看缓慢变化的维度表,以保留所有值的历史记录。存储很便宜,您肯定不会担心保留对数据的更改吗?如果您确实担心,请尝试使用多层存储,其中最新的“热门”数据存储在快速存储上,而一些廉价的慢速大容量存储保留“冷”归档数据我基本上支持这两种选择。我将所需的所有数据都存储在表中——大部分时间都是从其他表中复制的。