我正在与一个希望将时间戳添加到一堆表中的客户合作,以便他们可以按时间顺序对这些表中的记录进行排序。所有表还具有一个自动递增整数字段作为其主键(id)。
(简单的)想法-节省开销/存储,并依靠主键按时间顺序对字段进行排序。当然可以,但是我不确定这种方法在健全的数据库设计中是否可以接受。
优点:每条记录所需的存储空间更少,VO类更简单,等等。
缺点:它暗示着该字段的特征,否则就是简单的标识符,其定义无论如何都不会定义或保证它应该/将如此运行。
为了我的问题,假设数据库表定义是固定不变的。不过-就最佳做法而言,这是否可以接受?
谢谢
您要求的是“最佳实践”,而不是“糟糕的实践”,因此: 不 ,您不应该依赖自动递增的主键来建立时间顺序。有一天,您将对数据库设计进行一次更改,但该更改会失败。我已经看到了它的发生。
datetime列的默认值GETDATE()几乎没有开销(大约是整数),并且(更好)告诉您的不仅是顺序,而且还告诉您 实际的日期和时间 ,而事实证明, 日期和时间 通常是无价的。即使在该列上保持索引也是相对便宜的。
GETDATE()
这些天来,我 总是 将一CreateDate列数据对象连接到现实世界的事件(例如帐户创建)。
CreateDate
编辑添加:
如果确切的时间顺序对您的应用程序至关重要,则您不能依赖自动递增或时间戳(因为始终有相同的时间戳,无论分辨率有多高)。您可能不得不做一些特定于应用程序的事情。