日志表应该获取id字段还是主键?


12

我有一个日志表,捕获某些文件导出到另一个系统时的日期时间戳。

目前,exportedLog表具有三个字段:

id                (primary key)
messageId         (int)
exportedDateTime  (datetime)

对此进行回顾,我发现该id字段没有任何作用,因为没有该表的联接。该表上唯一起作用的是插入批处理作业,该批处理作业处理消息并将其插入此日志表。

我应该删除该id字段吗?

我是否应该在任何一个主键messageIdexportedDateTime或两者兼而有之?


2
这是用于哪个DBMS的?
ypercubeᵀᴹ

Answers:


10

我应该删除ID字段吗?

我建议保留它。

现在可能不需要该字段,但是将来,它确实可以为您提供帮助-如果您需要为每个日志条目存储文件的详细信息怎么办?

我不知道该表将变大和变多快,但是将列添加到大表通常是一项昂贵的操作。如果表相对较小,那么就存储空间而言并没什么大不了的。IMO,请保留色谱柱,以免日后头疼。

我应该在messageId或exportedDateTime或两者上都具有主键吗?

听起来好像没有messageId一个单独的表在此表中是唯一的(尽管我可能错了),并且仅在日期/时间列上创建唯一性可能会导致重复(并因此产生错误)。剩下的唯一选择是2列键,考虑到我上面提到的情况,它并不是特别吸引人。


从本质上讲,我的回答是,保留该列并不是一件大事(我假设),但是以后需要它可能会很重要,并且/或者需要额外的工作才能将其放回原处。


6
  • 如果您在此表上没有联接,没有更新也没有删除,那么您根本就不需要键。

  • 如果不是这种情况,并且messageId是唯一的,则可以将其设为主键。

  • 如果不是唯一的,而是唯一的,(messageId, exportedDateTime)则使其成为复合主键。

  • 如果甚至该(messageId, exportedDateTime)组合也可以重复并且可能需要更新和删除(例如删除意外插入的行),则最好将该id字段保留原样。


0

主键不会受到伤害...如果您考虑日志/审计跟踪的目的,将来可能会使用(查询)它来解决问题或恢复数据等,并且可能会与其他主键结合使用现有的非日志/审计表来执行此类工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.