【问题标题】:datamapper multi-field unique indexdatamapper 多字段唯一索引
【发布时间】:2010-11-25 03:00:50
【问题描述】:

在 Datamapper 中,如何指定两个字段的组合必须是唯一的。例如,类别在域中必须具有唯一名称:

class Category
  include DataMapper.resource
  property :name, String, :index=>true #must be unique for a given domain

  belongs_to :domain
end

【问题讨论】:

  • 某处我看到提到命名键将像这样分组。即 :unique_index=>:name 名称和域的名称。

标签: ruby indexing datamapper


【解决方案1】:

实际上,John Joschi 的回答是正确的:使用命名的 :unique_index 值确实会创建多列索引;阅读这些散列火箭的右侧很重要(即,如果它只是 true,那你就是对的)。

【讨论】:

  • 我已经离开了 DataMapper,所以这可能已经改变了,但在我写评论的时候,它是正确的。
【解决方案2】:

您必须为这两个属性创建唯一索引:

class Category
  include DataMapper::Resource

  property :name, String, :unique_index => :u
  property :domain_id, Integer, :unique_index => :u

  belongs_to :domain
end

【讨论】:

  • 这是不正确的,因为它要求名称和域在整个表中都是唯一的。我问的是如何使集合 (:name, :domain) 独一无二。
  • 确实,虽然:u 符号本来可以更清晰——例如:index_on_name_and_domain_id——它实际上是正确的。请参阅 DataMapper 属性文档页面上的索引部分:rubydoc.info/github/datamapper/dm-core/master/DataMapper/…。这些语句创建一个多列复合唯一索引。
【解决方案3】:

您是否尝试将这两个属性都定义为键?不确定我是否尝试过,但这样它们应该成为复合键。

property :name, String, :key => true    
property :category, Integer, :key => true

【讨论】:

  • 其实已经有key了,只是我没有在sn-p代码中包含。
猜你喜欢
  • 2015-06-16
  • 2016-01-18
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
相关资源
最近更新 更多