数据库表中包含版本号的名称列什么

我正在试图找出在我的数据库表中调用该列的内容,该列将INT保存到特定的“记录版本”。我目前正在使用“RecordOrder”,但我不喜欢这样,因为人们认为更高=更新,但我使用它的方式,更低=更新(“1”是当前记录,“2”是第二个最新的,“3”年龄仍旧,等等)。我考虑过“RecordVersion”,但我担心这会有同样的问题。还有其他建议吗? “RecordAge”? 我这样做是因为当我插入表格时,而不是必须找出下一个版本,然后冒着在我写之前从我这个号码被盗的风险,我只是插入带有“RecordOrder”0的插入桌面上有一个触发器AFTER INSERT将该键的所有“RecordOrder”数字增加1,所以我刚插入的记录变为“1”,其他所有记录增加1.这样,你就可以得到一个人的选择RecordOrder = 1的当前记录,而不是获取MAX(RecordOrder)然后选择它。 PS - 我也批评为什么这是一个可怕的想法,我应该增加这个指数。这似乎使查找更容易,但如果这是一个坏主意,请赐教! 有关数据的一些细节,例如: 我有以下数据库表:
CREATE TABLE AmountDue (
    CustomerNumber INT,
    AmountDue      DECIMAL(14,2),
    RecordOrder    SMALLINT,
    RecordCreated  DATETIME
)
我的数据子集如下所示:
CustomerNumber    Amountdue      RecordOrder                 RecordCreated
           100            0                1       2009-12-19 05:10:10.123
           100        10.05                2       2009-12-15 06:12:10.123
           100       100.00                3       2009-12-14 14:19:10.123
           101         5.00                1       2009-11-14 05:16:10.123
在这个例子中,客户100有三行 - 他们欠100美元,然后是10.05美元,现在他们欠什么。如果我需要澄清它,请告诉我。 更新: “RecordOrder”和“RecordCreated”列不可供用户使用 - 它们仅供内部使用,并帮助确定哪些是当前客户记录。此外,我可以使用它来返回适当订购的客户历史记录,尽管我可以轻松地使用日期。我想,我可以完成与仅使用RecordCreated日期的递增“记录版本”相同的事情,但是这消除了知道RecordOrder = 1是当前记录的便利性,并且我回到了进行子查询DateTime上的MAX或MIN确定最近的记录。     
已邀请:
我认为“当前版本= 1”是一个坏主意,因为当您添加新的当前记录时,您将不得不更新所有以前的版本。而引用旧版本号的任何其他表或应用程序现在都是错误的。我必须编写一个与大型机程序接口的服务,这样的工作就像那样,并且浪费了几十个开发人员时间。 我通常使用
version_id
字段进行版本控制,每次都会增加。然后当我想找到最新的记录时,我在查询中
order by version_id desc
并仅选择第一行。 编辑:我没有看到iandisme刚刚指出的datawarehousing标签。如果选择所有版本都不起作用,我会看到一些系统保留一个单独的表,只存储另一个表中每个记录的最新版本。因此,当新版本添加到
Record
表时,相应的
RecordVersion
记录会更新以存储该新版本。这对我工作的东西来说一直都是过度的,但我不会在整个数据仓库上工作,所以我不知道这会更好还是更糟。     
我认为您应该使用具有当前时间默认值的TimeStamp字段,而不是使用Integers来说明哪个版本的行是最新版本。 这样,无论谁在什么时间添加一行,对于该行的最新版本都没有歧义。 我认为将所有关联的行重新编号为id + 1并不是一个好主意,原因有多种: 你正在改变一些没有必要改变的东西 锁定和阻止将增加 使用比所需更多的处理能力和内存     
你有什么理由不能使用RecordCreated日期完成同样的事情吗? 做类似的事情:
select top 1 columna, columnb, etc. from table order by RecordCreated desc
会给你最新的记录,你不必担心记录修改。 您可能会因记录重新编号方法(索引争用,锁定升级等)而导致各种问题。 锁定升级:http://msdn.microsoft.com/en-us/library/aa213033(SQL.80).aspx 索引争用:http://blogs.digineer.com/blogs/jasons/archive/2009/02/25/monitoring-index-contention-with-dmfs.aspx 正如其他人在数据仓库方面提到的那样,您可以始终在数据集的顶部放置视图或快照或类似内容,以便以您希望的格式提供数据(仅限最新记录等)。显然我不熟悉哪些约束或要求足以知道view / snapshot / etc。在你的情况下有意义。     
我喜欢Raj More的使用时间戳的想法。 但我意识到,搜索最新记录的任何查询都很困难,并且会导致繁重的处理。 所以我建议这个想法:使用时间戳(无论如何)记录订单, 但保留一个字节字段以轻松识别最新记录。 在这种情况下,您将使当前记录的LatestRecord值为1,而其他每个值= NULL。这样你就可以创建一个忽略空值的索引? 这将大大简化您的所有查询。     
好吧,我看到的问题是你将浪费大量的数据库处理时间重新编号。此外,我不知道您是否将recordOrder暴露给用户,但如果您是,他们将希望能够使用该号码询问有关它的问题,并且不断变化会让人感到困惑和烦恼。当然,您已经指出订单不是未来开发商可能期望的订单的问题。 为什么不使用一个标识字段然后编号将是自动的(那么在插入之前不会出现窃取数字的问题)。只要您可以通过id desc和客户编号订购以查看一个人的所有记录,是否为每个客户重复编号真的很重要吗?或者您可以使用记录日期字段来订购记录。     
你所说的是一个年龄而不是一个版本,所以你可以称之为RecordAge。但我会完全摆脱它,因为你似乎想要做的就是获得特定客户的最新订单。 这可以通过使用客户编号和日期/时间字段来实现。如果你将这两者的组合作为一个独特的约束,并且在你的客户代码中放置重试逻辑,那么你很难获得竞争条件,你应该没有问题。 在插入一个记录时触发触发器以修改大量记录的想法是一个坏主意,因为随着记录的添加它变得越来越昂贵。 非常关键地看任何引入任意列的设计,如版本号。它实际上是一个派生属性(取决于其他属性,在这种情况下,客户编号和日期),虽然出于性能原因可以这样做,但它应该只是为了缓解特定问题而且只有在您了解后果时才能这样做。 我无法看到在日期上使用小整数作为自己抵消触发器成本的性能改进,但是,与所有数据库决策一样,测量,不要猜测。     

要回复问题请先登录注册