使用时间戳作为主键是个好主意 - mysql/mariadb?

dav*_*vid 8 mysql mariadb sql-server

我们只是认为在微软的 sqlserver 中存储时间戳确实保证了唯一性,但我对 mysql/mariadb 有点怀疑,因为我们在插入到 mysql/mariadb 数据库时使用并行执行。

那么,使用时间戳作为主键是个好主意吗 - mysql/mariadb?

PS:总是有一个 PK 和状态,但如果我们使用时间戳作为 where 子句来获取要存档/删除的实际剩余记录(以便查询记录有效),那么它很重要。所以它的唯一性很重要

Len*_*art 5

IMO 由于多种原因,这很糟糕。首先,盲目地为每个关系分配一个生成的 pk 是不好的做法。至少尝试确定每个关系中有哪些候选键。在某些情况下,代理PK可能是最明智的选择,但绝对不是在所有可能的情况下都是如此。候选键的良好属性是:

  • 独特的
  • 不可约
  • 不复杂
  • 稳定的
  • 熟悉的

这些标准之间常常存在冲突,您必须牺牲一个标准来换取另一个标准。

其次,如果最佳选择是代理标识符,我会说时间戳是一个糟糕的选择。特别是在 MySQL/MariaDB (MySQL) 5.6.4 之前的版本中,分辨率为秒。在这些 DBMS 中使用时间戳作为 pk 意味着每秒不能插入超过一行(只要时间戳应反映插入时间)。