2012-04-28 74 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