Database design 数据库表中保存版本号的列的名称

Database design 数据库表中保存版本号的列的名称,database-design,data-warehouse,columnname,Database Design,Data Warehouse,Columnname,我试图弄清楚在我的数据库表中如何调用包含特定“记录版本”的INT的列。我目前正在使用“RecordOrder”,但我不喜欢这样,因为人们认为较高=较新,但我使用它的方式,较低=较新(其中“1”是当前记录,“2”是第二最新记录,“3”更老,依此类推)。我考虑过“录制版本”,但恐怕也会有同样的问题。还有其他建议吗?“记录时代”“ 我这样做是因为当我插入到表中时,我不必找出下一个版本,然后冒着在我写之前从我那里窃取该数字的风险,我只需插入一个“RecordOrder”为0的insert。INSERT之

我试图弄清楚在我的数据库表中如何调用包含特定“记录版本”的INT的列。我目前正在使用“RecordOrder”,但我不喜欢这样,因为人们认为较高=较新,但我使用它的方式,较低=较新(其中“1”是当前记录,“2”是第二最新记录,“3”更老,依此类推)。我考虑过“录制版本”,但恐怕也会有同样的问题。还有其他建议吗?“记录时代”

我这样做是因为当我插入到表中时,我不必找出下一个版本,然后冒着在我写之前从我那里窃取该数字的风险,我只需插入一个“RecordOrder”为0的insert。INSERT之后的表上有一个触发器,它将该键的所有“RecordOrder”数字增加1,因此我刚才插入的记录变为“1”,其他所有记录都增加1。这样,您就可以通过选择RecordOrder=1来获取一个人的当前记录,而不是获取最大值(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日期来完成与递增“Record Version”相同的事情,但这样就不方便知道RecordOrder=1是当前记录,我又回到了使用DateTime上的MAX或MIN进行子查询来确定最近的记录。

我认为“current Version=1”这是个坏主意,因为当您添加新的当前记录时,您必须更新所有以前的版本。而引用旧版本号的任何其他表或应用程序现在都将是错误的。我编写了一个与大型机程序接口的服务,该程序就是这样工作的,这是一个巨大的难题,浪费了开发人员几十个小时

我通常使用
version\u id
字段进行版本控制,该字段每次都会递增。然后,当我想查找最新记录时,我在查询中按版本排序_iddesc,只选择第一行


编辑:我没有看到iandisme刚才指出的数据仓库标签。如果选择所有版本都不起作用,我见过一些系统保留一个单独的表,只在另一个表中存储每条记录的最新版本。因此,当向
记录
表中添加新版本时,相应的
记录版本
记录将更新以存储新版本。对于我所从事的工作来说,这总是有些过分,但我不处理整个数据仓库,所以我不知道这是更好还是更糟。

你所说的是一个时代,而不是一个版本,所以你可以称之为记录时代。但我会把它全部扔掉,因为你似乎只想为某个特定的客户获得最新的订单

这可以通过使用客户编号和日期/时间字段来实现。如果您将这两者的组合作为一个唯一的约束条件,并在客户机代码中加入重试逻辑,那么您应该不会遇到任何问题

在插入一条记录时触发一个触发器来修改大量记录的想法是一个坏主意,因为随着记录的增加,它变得越来越昂贵

仔细观察任何引入任意列(如版本号)的设计。它实际上是一个派生属性(取决于其他属性,在本例中是客户编号和日期),虽然出于性能原因可以这样做,但只有在您了解后果的情况下,才应该这样做以缓解特定问题


我看不出在日期上使用一个小整数可以抵消触发器的成本,但是,与所有数据库决策一样,测量,不要猜测。

为什么不能使用RecordCreated日期来完成本质上相同的事情

做一些类似于:

select top 1 columna, columnb, etc. from table order by RecordCreated desc
会给你最新的唱片,你就不用担心唱片的修改了

使用记录重新编号方法可能会导致各种问题(索引争用、锁升级等)

锁升级:

索引争用:


正如其他人在数据仓库方面提到的那样,您可以始终在数据集的顶部放置一个视图、快照或类似的内容,以便以您想要的格式(仅限最新记录等)提供数据。显然,我不太熟悉您的约束或要求,不知道视图/快照/等在您的情况下是否有意义。

好的,我看到的问题是,重新编号会浪费大量的数据库处理时间。此外,我不知道您是否向用户公开recordOrder,但如果您是,他们会希望能够使用该号码询问有关recordOrder的问题,而让它不断更改将既令人困惑又烦人。当然,您已经指出的问题是,订单不是未来开发人员可能期望的