我的情况是会有一个多个站点的URL别名查找表。每个站点都被认为是它自己的命名空间,因此只要它们位于不同的站点中,重复的别名就可以了。
我的问题是在存储这些信息时,PostgreSQL在存储数据之间是否存在性能差异:
____________________________________
|Alias(PK) | Page_Object(FK) |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|namespace.alias|actual page |
VS
_________________________________________
|Namespace(CK)|Alias(CK)|Page_Object(FK)|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|namespace |alias |actual page |
答案 0 :(得分:1)
第一个是错的?
这不是性能问题,而是正确性问题。
如果别名仅在给定命名空间内是唯一的,则需要复合唯一索引。如果您添加代理主键,然后创建UNIQUE(namespace, alias)
约束,或者如果您只有PRIMARY KEY(namespace, alias)
但需要其中一个,则由您决定。许多愚蠢的ORM坚持使用单列密钥,所以如果你正在使用像Rails这样的东西,如果你屈服于它的需求,你将面临更少的痛苦,创建一个代理主键,然后对这两个密钥进行独特约束真正的钥匙。
表现明智,无论如何都没有太大区别。该指数可能会更大一些,但不是吨,这就是真正改变的。