首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快照SQL数据库行的最佳实践

问快照SQL数据库行的最佳实践
EN

Stack Overflow用户
提问于 2010-07-15 05:57:15
回答 2查看 193关注 0票数 0

我有两张桌子X和Y。这是一个基于web的CRUD应用程序的后端。

假设Y中的行有a、b和c字段。在X中创建行时,它必须链接到特定行Y中值的快照。Y中的行稍后可能会更改,但是X中的行在创建时仍然应该具有a、b和c的值。

做这种事情的“正确”方法是什么?在a、b和c中复制X字段似乎很简单,但我想知道是否有更好的方法来做到这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-15 06:36:00

您需要实现一个“缓慢变化的维度”。

简单地说,除了“自然”键之外,您还拥有一个valid_from和valid_to时间戳。

当前行的"valid_to“总是为"9999-12-31 23:59:59”,或者是系统所能处理的最高日期/时间。

第一排应该是:-

代码语言:javascript
复制
id       valid_to    valid_from     description.
 1      2009-12-25   9999-12-31     My best new toy.

更改描述时,不要覆盖当前行,而是添加完整的新行,更改旧行中的valid_to日期,因此:-

代码语言:javascript
复制
id       valid_to    valid_from     description.
 1      2009-12-25   2009-06-22     My best new toy
 1      2010-06-23   9999-12-31     A broken toy.

然后,您可以将您的Y行的创建日期使用到相应的your日期。

代码语言:javascript
复制
Select * from x 
         join Y on x.id = y.id 
                and x.create-date >= valid_from
                and x.create-date <= valid_to

我建议您使用时间戳而不是日期,但原则是更容易说明使用日期。

票数 3
EN

Stack Overflow用户

发布于 2010-07-15 06:10:11

“复制”栏目对我来说似乎是正确的选择。有些人可能错误地认为,复制数据违反了正确的数据库设计,但实际上每个表(及其列)都保存着不同的数据。一个是“当前”值,另一个表在特定时间点有这些值。

一个类似的例子是发票上的地址。如果您需要在发票时捕获客户的地址,那么您不会通过将地址列和发票放在一起来复制数据,以及在客户中有一个地址,因为它们可能包含不同版本的地址。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3252817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档