[英]Can I use Elegant Pairing Function as primary key in DB?
我正在写一个服务器,允许多个用户修改帖子。
因此,我创建了包含用户ID,帖子ID和权限数据的权限表。
而且我只想只查询一个值(我只是想查询一个值比查询两个值更有效),所以我用Google搜索并找到了这个 。
但是,我还发现Cantor配对功能不是唯一的 ,
因此我们不能使用Cantor Pairing Function作为主键。
但这仅涉及Cantor方式,而不涉及优雅的配对功能(作者Matthew Szudzik)
优雅配对功能如何?
使用优雅配对密钥作为数据库中的主密钥是否安全?
还是我应该放弃并用两个值查询它?
除非您的存储设备实施了单个ID字段约束,否则我认为这是著名的示例
过早的优化是万恶之源。 (D.Knuth)。
请注意,康托尔配对功能对于实数不是唯一的,但对于整数不是唯一的,我不认为您的ID是非整数。 我认为对于您引用的优雅配对功能来说,这是完全相同的,因为从结构上讲,它是基于相同的思想。 如果您需要特定的反例,请参考以下示例:
ElegantPair(1, 2) = 2^2 + 1 = 5 = 2.1^2 + 0.59 = ElegantPair(0.59, 2.1)
另一方面,真正的问题是,无论您使用什么巧妙的技巧,都无法将两个32位(或您使用的任何大小)int值放入相同大小的单个int值中。 背后配对函数的诀窍是基于一个事实,即整个N是无限和N×N个具有相同的“大小”,作为仅仅局限于N这显然不是一个固定大小的实(计算机)世界整数真。 因此,无论您在固定大小的int上使用什么映射,它都不是唯一的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.