0

我正在编写一个允许多个用户可以修改帖子的服务器。
所以我创建了包含用户 ID、帖子 ID 和权限数据的权限表。
而且我只想用一个值来查询这个(我只是认为用一个值查询比用两个值查询更有效),所以我用谷歌搜索并找到了这个
但是,我也发现Cantor Pairing Function 不是 unique
所以我们不能使用 Cantor Pairing Function 作为主键。

但这仅涉及康托尔方式,而不是优雅配对功能(Matthew Szudzik)
优雅配对功能怎么样?
使用优雅的配对键作为数据库中的主键是否安全?
还是我应该放弃并用两个值查询?

4

1 回答 1

1

除非您的存储强制执行单个 ID 字段约束,否则我相信这是著名的示例

过早的优化是万恶之源。(D.克努斯)。

请注意,康托尔配对函数对于数不是唯一的,但对于整数是唯一的,我认为您的 ID 不是非整数。我认为这与您引用的优雅配对函数完全相同,因为在结构上它基于相同的想法。如果你需要一个具体的反例,这里有一个:

ElegantPair(1, 2) = 2^2 + 1 = 5 = 2.1^2 + 0.59 = ElegantPair(0.59, 2.1)

另一方面,真正的问题是,无论您使用什么巧妙的技巧,您都无法将两个 32 位(或您使用的任何大小) int 值放入一个相同大小的 int 值中。配对函数背后的技巧是基于这样一个事实,即整个N是无限的,并且N x N具有与N相同的“大小”,这对于固定大小的真实(计算机)世界整数显然不正确。因此,无论您在固定大小的整数上使用什么映射,它都不会是唯一的。

于 2018-02-13T16:50:56.363 回答