我正在编写一个允许多个用户修改帖子的服务器。
所以我创建了包含用户 ID、帖子 ID 和权限数据的权限表。
而我只想用一个值查询这个(我只是认为用一个值查询比用两个值查询更有效),所以我用谷歌搜索并找到 this .
但是,我还发现 Cantor Pairing Function isn't unique ,
所以我们不能使用 Cantor Pairing Function 作为主键。
但这只涉及 Cantor 方式,而不是 Elegant Pairing Function (by Matthew Szudzik)
优雅的配对功能如何?
使用优雅配对 key 作为数据库中的主键是否安全?
或者我应该放弃并用两个值查询吗?
最佳答案
除非您的存储强制执行单个 ID 字段约束,否则我相信这是著名的示例
Premature optimization is the root of all evil. (D.Knuth).
请注意,Cantor 配对函数对于实数 不是唯一的,但对于整数 和 I不要认为您的 ID 是非整数。我认为这与您引用的优雅配对功能完全相同,因为在结构上它基于相同的想法。如果您需要一个具体的反例,这里有一个:
ElegantPair(1, 2) = 2^2 + 1 = 5 = 2.1^2 + 0.59 = ElegantPair(0.59, 2.1)
另一方面,真正的问题是无论您使用什么巧妙的技巧,您都无法将两个 32 位(或您使用的任何大小)的 int 值放入一个相同大小的 int 值中。配对函数背后的技巧是基于这样一个事实,即整个 N 是无限的并且 NxN 具有与 相同的“大小” >N 这对于固定大小的真实(计算机)世界整数显然不正确。因此,无论您在固定大小的整数上使用什么映射,它都不会是唯一的。
关于database - 我可以使用优雅的配对功能作为数据库中的主键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48771333/