小编典典

SQL最佳实践-可以依靠自动增量字段按时间顺序对行进行排序吗?

sql

我正在与一个希望将时间戳添加到一堆表中的客户合作,以​​便他们可以按时间顺序对这些表中的记录进行排序。所有表还具有一个自动递增整数字段作为其主键(id)。

(简单的)想法-节省开销/存储,并依靠主键按时间顺序对字段进行排序。当然可以,但是我不确定这种方法在健全的数据库设计中是否可以接受。

优点:每条记录所需的存储空间更少,VO类更简单,等等。

缺点:它暗示着该字段的特征,否则就是简单的标识符,其定义无论如何都不会定义或保证它应该/将如此运行。

为了我的问题,假设数据库表定义是固定不变的。不过-就最佳做法而言,这是否可以接受?

谢谢


阅读 174

收藏
2021-03-17

共1个答案

小编典典

您要求的是“最佳实践”,而不是“糟糕的实践”,因此:
,您不应该依赖自动递增的主键来建立时间顺序。有一天,您将对数据库设计进行一次更改,但该更改会失败。我已经看到了它的发生。

datetime列的默认值GETDATE()几乎没有开销(大约是整数),并且(更好)告诉您的不仅是顺序,而且还告诉您 实际的日期和时间
,而事实证明, 日期和时间 通常是无价的。即使在该列上保持索引也是相对便宜的。

这些天来,我 总是 将一CreateDate列数据对象连接到现实世界的事件(例如帐户创建)。

编辑添加:

如果确切的时间顺序对您的应用程序至关重要,则您不能依赖自动递增或时间戳(因为始终有相同的时间戳,无论分辨率有多高)。您可能不得不做一些特定于应用程序的事情。

2021-03-17