我有一个日志表,它捕获某些文件何时导出到另一个系统的日期时间戳。
exportLog 表目前有三个字段:
id (primary key)
messageId (int)
exportedDateTime (datetime)
回顾这一点,我发现该id
字段没有任何用途,因为该表没有连接。唯一在这个表上工作的是批处理作业的插入,它处理消息并插入到这个日志表中。
我应该删除该id
字段吗?
messageId
我应该在其中一个或exportedDateTime
两个上都有主键吗?
我建议保留它。
您现在可能不需要该字段,但在将来,它真的可以帮到您——如果您需要为每个日志条目存储文件的详细信息怎么办?
我不知道这张表会有多大以及有多快,但是向大表中添加一列通常是一项昂贵的操作。如果桌子比较小,那么在存储空间方面保留并不是什么大问题。IMO,保留该列并在以后节省潜在的头痛。
听起来
messageId
单独在此表中并不唯一(尽管我可能是错的),并且仅在日期/时间列上创建唯一性可能会产生重复(并因此产生错误)。剩下的唯一选项是 2 列键,考虑到我上面列出的场景,这并不是特别吸引人。从本质上讲,我对这个答案的观点是,保留该列并不是什么大问题(我假设),但以后需要它可能是一个大问题和/或需要额外的工作才能将其放回原处。
如果您在此表上没有连接,没有更新和删除,那么您根本不需要键。
如果不是这种情况,并且
messageId
是唯一的,那么您可以将其设为主键。如果它不是唯一的,而是唯一
(messageId, exportedDateTime)
的,则将其设为复合主键。如果即使
(messageId, exportedDateTime)
组合可以提供重复并且可能需要更新和删除(例如删除意外插入的行),您最好保留该id
字段。主键不会受到伤害...如果您考虑日志/审计跟踪的目的,将来可能会使用(查询)它来解决问题或恢复数据等,并且可能会加入其他现有的非日志/审计表来执行这类工作。