kac*_*apy 13 database-design primary-key logs
我有一个日志表,用于捕获某些文件何时导出到另一个系统的日期时间戳。
导出的日志表目前有三个字段:
id (primary key)
messageId (int)
exportedDateTime (datetime)
Run Code Online (Sandbox Code Playgroud)
回顾这一点,我发现该id
字段没有任何用处,因为没有连接到该表。在这个表上唯一的工作是插入处理消息的批处理作业并插入到这个日志表中。
我应该删除该id
字段吗?
我是否应该在任何一个主键messageId
或exportedDateTime
或两者兼而有之?
Jon*_*gel 11
我应该删除 id 字段吗?
我建议保留它。
您现在可能不需要该字段,但将来它确实可以帮到您——如果您需要为每个日志条目存储文件的详细信息怎么办?
我不知道这个表会有多大以及多快,但是向大表添加列通常是一项昂贵的操作。如果桌子相对较小,那么在存储空间方面保持没什么大不了的。IMO,保留该列并在以后避免潜在的头痛。
我应该在 messageId 或导出的日期时间或两者上都有一个主键吗?
听起来messageId
这个表中的单独是唯一的(尽管我可能是错的),并且单独在日期/时间列上创建唯一性可能会创建重复项(从而导致错误)。剩下的唯一选项是 2 列键,考虑到我上面列出的场景,这不是特别吸引人。
从本质上讲,我对这个答案的观点是,保留该列并不是什么大问题(我假设),但以后需要它可能是一件大事和/或需要额外的工作才能将其放回原处。
如果您在此表上没有联接,没有更新和删除,那么您根本不需要密钥。
如果不是这种情况,并且messageId
是唯一的,那么您可以将其设为主键。
如果它不是唯一的,而是唯一的,(messageId, exportedDateTime)
则将其设为复合主键。
如果甚至(messageId, exportedDateTime)
组合可以提供重复项,并且可能需要更新和删除(比如删除意外插入的行),您最好保持该id
字段不变。