我有一个 TCG 卡数据库,我正在尝试确定一个主键。我最初使用代理键解决了问题,但我意识到有时我会忘记添加一些卡片,例如促销卡片。这对于代理键来说是有问题的,因为它们是使用最新的自动增量添加到数据库中的,我不希望它们的 ID 依赖于它们插入的顺序。我在想也许我可以对某些卡片功能进行哈希处理并将其用作主键?
以下面的伪代码为例:
// set code, date released, collector number, name
$crc = crc32(implode(',', ['A', '1993-08-03', '232a', 'black lotus']));
echo $crc; // 4199975187
卡的可能数量现在徘徊在 25k 左右,每 6 个月增长 100-300 左右。
- 以这种速度,不会发生碰撞吧?
- 这是好习惯吗?我还有其他好的选择吗?
我知道我可以通过将散列转换为来缩短散列,base 62
但我会将它们加入到用户的库存表中,所以我认为保留这些int
将是最好的选择。