我正在SQL Server 2008r2中创建一些企业主查找表。我需要保留一个特定于域的表。例如,Gender将是一个表,City可能是另一个表。在每个表中,我保留开始日期和结束日期以保留历史记录。
现在我被要求对这些版本进行版本设置,因此你会知道V1有这些代码,V2有这些更新的代码。考虑一个查找表非常简单。例如,使用Gender可以有Gender表,GenderVersion表和GenderToGenderVersion链接表。这将需要每次查找2个额外的表。只有几个表是可管理的,但我希望能够通过许多查找表获得更好的方法来实现这一目标
一些要求。
有什么想法吗?我讨厌拥有3x所需表格的想法。
[编辑] 其他详细信息
我们需要能够准确确定特定版本中的代码。 我们需要未编辑或从先前版本中删除的代码成为下一版本的一部分。 我们会在代码中维护开始日期和结束日期。版本标签是开始日期和结束日期的补充。
以下是使用Race的示例模型。这是
RaceVersion表
RaceToRaceVersion
比赛表
代码和版本都可以获取日期可搜索的生效日期。 您可以找到一个版本,然后与代码
相关联每当代码发生变化时(在这种情况下为Race),您可以添加新版本,然后查找当前有效的所有行并填充链接表。
这适用于几组代码。我希望这样的功能可以更好地扩展。
答案 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和表。这样,并非所有应用程序都必须使用相同的版本。