database - 我可以使用优雅的配对功能作为数据库中的主键吗?

标签 database algorithm math primary-key primary-key-design

我正在编写一个允许多个用户修改帖子的服务器。
所以我创建了包含用户 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/

相关文章:

database - Oracle SELECT - 双引号还是没有双引号?

database - 计算过载时的数据库性能

algorithm - 给定一个函数 rand7(),编写一个函数 rand10() 统一

algorithm - 在处理 Tabu Search Optimization 时,当所有相邻解决方案都是 tabu 时,通常的做法是什么?

java - 向鼠标移动一个点

java - 减少时间复杂度/优化解决方案

mysql - 执行数据库查询时出错。 MySql、Dreamweaver 和 Coldfusion

php - 使用 PHP 将定义的变量插入 MySQL 数据库/表,没有数据(显然)被写入数据库?

java - 数组中间随机枢轴的快速排序算法

python - 在 Python 中删除和替换多项式的系数