2012-04-28 69 views
0

我添加了一個遷移到現有的數據庫,從自動生成系統中的一個主鍵更改爲基於以下命令複合鍵組合鍵:的Rails:創建我的PostgreSQL數據庫

add_index :listings, [:telephone, :name, :latitude, :longitude] , :unique=>true 

我的問題是:

  1. 該命令生成的索引是一個整數嗎?由於所有的參數字段都是字符串。

  2. 如果我在db創建後運行這個命令,它是重新生成所有行的鍵還是必須爲此運行單獨的命令?

  3. 當這個命令運行時它有什麼區別嗎?如果在運行此表時沒有行,而不是在表有行後運行它?

感謝

閱讀下面的帖子後編輯:=============================== =====================

這是我的模型:

# Table name: listings 
# 
# id    :integer   not null, primary key 
# name    :string(50)  default("ERROR:Not Available"), not null 
# telephone   :string(15)  default("ERROR:Not Available"), not null 
# latitude   :string(15)  default("ERROR:Not Available"), not null 
# longitude   :string(15)  default("ERROR:Not Available"), not null 
# avatar   :string(30)  default("Not Available") 

因此,大家可以看到主鍵是id,自動生成由系統 當我添加上面的命令到底是什麼時候呢?我認爲它改變了ID字段,以便根據4列值生成一個整數。

正如你所猜測的那樣,可能會有比同名的2人更多的人。所以保證唯一性的唯一方法就是根據4列創建某種索引。

通過使用上面的命令,我做對了嗎? 這會加速查詢嗎?

回答

2
  1. 這不會改變您的主鍵。這隻會創建和索引,用於提高查詢性能(如果使用正確)
  2. 索引沒有類型,它就像一張地圖,而不是一列。
  3. 似乎Rails不支持組合鍵。

也許你的解決方案: http://compositekeys.rubyforge.org/


編輯: 如果你唯一擔心的是獨特性,你應該知道,活動記錄(在Rails的機型)配備了驗證與功能它。因此,您不需要爲該建議創建索引,也不需要創建撰寫ID。

+信息=>http://guides.rubyonrails.org/active_record_validations_callbacks.html#uniqueness

你可能還想看看有什麼分貝指數是: http://en.wikipedia.org/wiki/Database_index

閱讀,你應該明白,如果你需要的唯一原因創建索引之後加快查詢,如:

SELECT * FROM listings WHERE telephone=123123 AND name="John" AND latitude=123 AND longitude=323 

而且我敢肯定你不需要做出這樣的查詢,你已經知道所有這些值。

+0

PLease在您的文章發佈後,請參閱上文中的編輯以及其他一些問題....謝謝 – banditKing 2012-04-28 17:09:32