版本控制查找表

时间:2013-05-06 22:30:21

标签: sql sql-server sql-server-2008

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

现在我被要求对这些版本进行版本设置,因此你会知道V1有这些代码,V2有这些更新的代码。考虑一个查找表非常简单。例如,使用Gender可以有Gender表,GenderVersion表和GenderToGenderVersion链接表。这将需要每次查找2个额外的表。只有几个表是可管理的,但我希望能够通过许多查找表获得更好的方法来实现这一目标

一些要求。

  • 如上所述,查找表必须是特定于域的。我无法结合 他们。
  • 初级程序员必须能够构建一个选择 声明以查找基于特定版本的所有外观值。

有什么想法吗?我讨厌拥有3x所需表格的想法。

[编辑] 其他详细信息

我们需要能够准确确定特定版本中的代码。 我们需要未编辑或从先前版本中删除的代码成为下一版本的一部分。 我们会在代码中维护开始日期和结束日期。版本标签是开始日期和结束日期的补充。

以下是使用Race的示例模型。这是

RaceVersion表

  • RaceVersionID
  • VersionLabel
  • 开始日期
  • 结束日期

RaceToRaceVersion

  • RaceID
  • RaceVersionID

比赛表

  • RaceID(仅用于主代码DB)
  • RaceCode(用于所有其他使用这些代码的系统)
  • RaceDescription
  • 开始日期
  • 结束日期

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

相关联

每当代码发生变化时(在这种情况下为Race),您可以添加新版本,然后查找当前有效的所有行并填充链接表。

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

2 个答案:

答案 0 :(得分: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
)

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

答案 1 :(得分:0)

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

编辑从此处开始

突然出现的第二件事是添加一个ApplicationId和表。这样,并非所有应用程序都必须使用相同的版本。