0

我正在尝试为新数据库建模。要求之一是保留不同行的版本。这里是同一对象的 2 个版本的示例:

ID | UID                                  | Name  | Date
--------------------------------------------------------------
 1 | 734FD814-024D-4795-AFD0-34FECF89A13A | Alpha | 2013-02-08
 2 | 734FD814-024D-4795-AFD0-34FECF89A13A | Bravo | 2013-02-09

为了有这个表的外键作为参考,我需要指定一个主键。这两个候选者是IDUID一个作为auto increment数字,第二个作为每个对象手动生成的唯一标识符。

限制:

选择ID为主键时:

  • 创建对象的新版本时,对旧版本的所有引用都变得无效,必须更新
  • 手动更新每个插入的所有引用不是一个选项,非常繁重

选择UID为主键时:

  • UID不是唯一的,因此不能单独使用,必须与其他字段关联并在复杂主键中使用
  • 将使用的所有其他字段也可能会更改外键引用。

关于克服这些限制的最佳方法(尽可能轻)有什么建议吗?

PS:我正在使用 OrmLite 使用 POCO 对象对数据库进行建模。

4

2 回答 2

1

这是金融应用中非常常见的场景。一个很好的方法是将一行标记为活动的。例如:

ObjectID, StartDt, EndDt, ...other columns...

where[StartDt, EndDt>标记该行是“实际”行的时间间隔。你可以像这样加入:

join    YourTable yt
on      yt.ObjectId  = otherTable.ObjectID
        and yt.StartDt is not null
        and yt.EndDt is null -- Select active row
于 2013-02-09T12:00:05.963 回答
0

不会将版本更改为版本的字段(可能只是 ID)可以放入另一个表中。那是您链接到的表。然后,特定于版本的信息在另一个表中。为了帮助加入最新版本信息,您可以在该表中保留一个 IsLatest 标志。

于 2013-02-09T11:24:28.557 回答