【发布时间】:2019-09-25 18:57:35
【问题描述】:
我的数据库将存储大量数据点,因此我使用无符号 BIGINT 作为主键。
使用 DATETIME 对象作为主键有意义吗?
谢谢,
【问题讨论】:
标签: mysql database-design
我的数据库将存储大量数据点,因此我使用无符号 BIGINT 作为主键。
使用 DATETIME 对象作为主键有意义吗?
谢谢,
【问题讨论】:
标签: mysql database-design
是的,如果您需要唯一标识离散点或时间段,将日期/时间作为键或键的一部分当然是有意义的。我不能说这是否适用于您的场景,但作为一般规则,密钥不能基于时间没有根本原因 - 几乎所有数据仓库都这样做。
【讨论】:
否,因为不能保证它是唯一的。坚持使用 BIGINT。您可以在 DateTime 上放置一个很好的索引进行查询,它就足够了。
【讨论】:
这没有任何意义,因为您将被限制为每秒一条记录,而没有任何实际原因。
【讨论】:
如果您的数据来自一个按时间排序的集合,那么这很有意义。比如说,金融交易的记录。如果您有多个自然发生在不同时刻的数据点,但由于舍入而具有相同的时间戳,请更改低位以区分它们。
这是 MySQL 中的 more problematic 而不是 other 数据库,因为时间戳的存储精度仅为 1 秒。(编辑:从 5.6.4 开始,MySQL 有微秒时间类型的精度)
【讨论】:
如果您碰巧每秒有多次观察,这将失败。出于这个原因,除非你能保证每秒永远不会超过一个点,否则最好不要这样做。
【讨论】: