1

我正在 SQL Server 2008r2 中创建一些企业主查找表。我需要保留一个特定于域的表。例如,Gender 可以是一个表,City 可以是另一个表。在每个表格中,我都保留开始日期和结束日期以保留历史记录。

现在我被要求对这些进行版本控制,这样你就会知道 V1 有这些代码,而 V2 有这些更新的代码。考虑一个查找表非常简单。以 Gender 为例,您可以有一个 Gender 表、一个 GenderVersion 表和一个 GenderToGenderVersion 链接表。这将需要每次查找 2 个额外的表。只有几个可以管理的表,但我希望能找到一个更好的方法来使用许多查找表

几个要求。

  • 如前所述,查找表必须是特定于域的。我无法将它们结合起来。
  • 初级程序员必须能够构建一个选择语句来查找基于特定版本的所有外观值。

有任何想法吗?我讨厌拥有 3 倍所需表格的想法。

[编辑] 附加细节

我们需要能够准确地确定特定版本中的代码。我们需要未从先前版本中编辑或删除的代码成为下一版本的一部分。我们确实在代码中维护了开始和结束日期。除了开始日期和结束日期之外,还有版本标签。

这是使用 Race 的示例模型。这是与

RaceVersion 表

  • 种族版本ID
  • 版本标签
  • 开始日期
  • 结束日期

RaceToRace 版本

  • 种族ID
  • 种族版本ID

比赛表

  • RaceID(仅用于主代码数据库)
  • RaceCode(用于使用这些代码的所有其他系统)
  • 比赛说明
  • 开始日期
  • 结束日期

代码和版本都获取日期可搜索的生效日期。你可以找到一个版本,然后关联到代码

每当代码发生更改时,在本例中为 Race,您可以添加新版本,然后查找当前有效的所有行并填充链接表。

这适用于几组代码。我希望这样的功能可以更好地扩展。

4

2 回答 2

1

version如果您向每个查找表添加一列,则可以避免使用多个表。每次输入数据的新版本时,增加版本。从查找中选择数据时,您始终必须指定正确的版本。

id | version | name
---------------------------------
 1 |       1 | Lookup Name for V1
 1 |       2 | Lookup Name for V2

SELECT name 
FROM lookup
WHERE id = 1
    AND version = 2

如果您想轻松选择最新版本,则需要创建一个视图:

SELECT id, name
FROM lookup lu
WHERE version = (
    SELECT MAX(version)
    FROM lookup lu2
    WHERE lu.id = lu2.id
)

但是,此视图的性能成本可能超过维护更详细的选择语句(每次都包含该版本)的成本。

于 2013-05-06T22:45:42.413 回答
0

我首先想到的是所有这些表中的 versionId 字段和描述每个 versionId 含义的版本表。相同数量的表,每个中的更多记录。

编辑从这里开始

我脑海中闪现的第二件事是还添加了一个 ApplicationId 和表。这样,并非所有应用程序都必须使用相同的版本。

于 2013-05-06T22:43:44.210 回答