2014-01-24 48 views
0

我有一種情況,將有多個站點的URL別名查找表。每個站點都被認爲是自己的命名空間,所以重複的別名只要在不同的站點就可以。鍵值查找情況中非規格化PK與化合物PK之間的區別?

我的問題是存儲這些信息的時候,有沒有存儲這樣的數據之間PostgreSQL中的性能差異:

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

VS:

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

回答

1

第一個是錯了嗎?

這不是一個性能問題,這是一個正確性問題。

如果別名僅在給定名稱空間內是唯一的,那麼您需要一個複合唯一索引。如果您添加代理主鍵,然後創建一個UNIQUE(namespace, alias)約束,或者您只有PRIMARY KEY(namespace, alias),但您需要其中一個,則由您決定。許多愚蠢的ORM堅持使用單鍵密鑰,所以如果你正在使用像Rails這樣的東西,那麼如果你屈服於它的需求,就會面臨更少的痛苦,創建一個代理主鍵,然後對這兩個鍵進行唯一約束真正的鑰匙。

性能方面,沒有太大的差別。指數可能會稍微大一些,但不是很重要,而這些都是真正改變的。

+0

這基本上就是我遇到的情況,第二個選擇是使用組合鍵實際上可以讓我完成更多有用的工作,比如選擇特定的命名空間。謝謝! – ebolyen