【发布时间】:2014-02-19 19:12:13
【问题描述】:
是否保证复合键是唯一的,只要它所包含的列的各个值是唯一的(如在单独评估列值中),或者它是结果值(如在列值的串联中) 构成密钥并且必须是唯一的?
例如,以下两行是否会产生相同的键,或者它们都被认为是唯一的并因此被允许:
PRIMARY KEY (user_id, friend_id)
|-----------|-------------|
| user_id | friend_id |
|-----------|-------------|
| 10 | 283 |
| 1028 | 3 |
|-----------|-------------|
现在,我显然不是数据库专家,这实际上是我第一次考虑使用复合键(以前从来没有理由),所以它可能是“每个人”都知道的东西,或者真的很容易在文档中找到,但我一直无法找到答案。
您希望上面的示例能够正常工作(从逻辑上讲,为什么不应该呢?单独的值肯定是唯一的),但我真的想在继续我的项目之前确定一下。
【问题讨论】:
-
我不确定,但我认为很明显,如果复合 PK 的列的连接是唯一的,你就不能说它是唯一的 :-) 因为这不是复合 PK 的概念。现在,您可能会争辩说,某些 INDEX(使查询更快)可以使用复合 PK 列的连接来计算一些哈希(在这种情况下,当然,即使这个哈希也不会是唯一的,尽管好的哈希函数试图尽可能传播其值以保持搜索速度更快)。
-
现在,如果您想使用 INDEXES 加速您的复合 PK 检查,那么您关于 PostgreSQL 复合 PK 评估内部的问题可能适合这里 :-) IMO