键值查找情况下非规范化PK和复合PK之间的区别?

时间:2014-01-24 19:49:49

标签: sql postgresql database-schema

我的情况是会有一个多个站点的URL别名查找表。每个站点都被认为是它自己的命名空间,因此只要它们位于不同的站点中,重复的别名就可以了。

我的问题是在存储这些信息时,PostgreSQL在存储数据之间是否存在性能差异:

____________________________________
|Alias(PK)      | Page_Object(FK)  |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|namespace.alias|actual page       |

VS

_________________________________________
|Namespace(CK)|Alias(CK)|Page_Object(FK)|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|namespace    |alias    |actual page    |

1 个答案:

答案 0 :(得分:1)

第一个是错的?

这不是性能问题,而是正确性问题。

如果别名仅在给定命名空间内是唯一的,则需要复合唯一索引。如果您添加代理主键,然后创建UNIQUE(namespace, alias)约束,或者如果您只有PRIMARY KEY(namespace, alias)但需要其中一个,则由您决定。许多愚蠢的ORM坚持使用单列密钥,所以如果你正在使用像Rails这样的东西,如果你屈服于它的需求,你将面临更少的痛苦,创建一个代理主键,然后对这两个密钥进行独特约束真正的钥匙。

表现明智,无论如何都没有太大区别。该指数可能会更大一些,但不是吨,这就是真正改变的。