Question: I have a log table that captures the datetime stamp of when certain files were exported to another system.

The exportedLog table currently has three fields:

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

```

Reviewing this I found that the `id` field serves no purpose, as there are no joins to this table.
The only thing working on this table is the insert of the batch job that processes the messages and inserts into this log table.

Should I remove the `id` field?

Should I have a primary key on either `messageId` or `exportedDateTime` or both?

Answer: 
* If you don't have joins on this table, no updates and no deletions, then you don't need keys at all.
* If this is not the case, and `messageId` is unique, then you can make it a primary key.
* If it's not unique, but `(messageId, exportedDateTime)` is, then make this a composite primary key.
* If even the `(messageId, exportedDateTime)` combination can give duplicates **and** updates and deletes might be needed (say to remove accidentally inserted rows), you'd better leave the `id` field as is.
A Primary Key won't hurt... if you consider the purpose of the log/audit trail, it will probably be used (queried) in the future to resolve an issue or restore data, etc. and will likely be joined to other existing non-log/audit tables to perform that sort of work.