根据我使用数据库的经验,日期对于主键来说是非常糟糕的字段。每次我遇到它们时,无论应用程序是如何编程的,总会有一些东西让你用日期来咬你。最常见的情况是“我输入了错误的日期,现在我想更改它,但我不能不更新十几个子表”或“数据库只是复制了我的数据,因为我更正了日期并且软件重新提交了我的报告,它无法告诉它是重复的”。
此外,您必须记住,日期实际上并不能保证是唯一的。举个简单的例子,将时钟调回夏令时会发生什么?突然,您有一个日期,其中 1:00 am 出现了两次,这意味着您已经有一个合法的情况,日期可以在两个实例中发生冲突。根据您的解决方案,您可能需要确保使用时区或指定 UTC。您可以使用 UNIX 时间戳来帮助解决此问题,但即便如此,您仍要依赖两个不同的、不相关的计算机系统来正确跟踪时间并就现实达成一致。
同样,IP 地址不必是全球唯一的。私有 IP 寻址和 NAT 可以轻松构建两个系统具有相同 IP 地址的场景。事实上,除非您是所有相关系统的系统管理员,否则您无法可靠地使用主机名、IP 地址、MAC 地址甚至 BIOS 序列号并期望得到保证的唯一值。这就是系统 BIOS 通常具有系统 GUID 的原因(尽管我已经看到翻新系统板将具有全零 GUID 的实例,因此即使这也不确定)。
如果您选择使用这两个字段的复合键,那么我怀疑您将两全其美。
我了解您正在开发一个非常小的系统,并且不太可能出现这些问题,但作为系统分析师,我立即怀疑实际上需要日期和 IP 地址是唯一的程序的持久性,特别是如果数据是来自多个独立来源。