【问题标题】:Select unique records without natural keys选择没有自然键的唯一记录
【发布时间】:2012-03-29 13:25:36
【问题描述】:

例如,我有表 names: id integer primary key, name text unique 和 names(name) 的唯一索引。

我想通过索引样式语法选择记录:(n12, nBill) = (Name[12], Name['Bill']) 或 Name.get['Smitt']。

作为文档says,可以使用“自然键”来完成,但是如何在 SQLite 中创建它们?

更新:
@Frost:正如Spotlight on... Composite Keys 所说,必须使用两个键调用具有复合键的记录: Name.get(1, 'Smitt'),我错了。我需要通过 any 键选择记录:

Name[1] == Name['Smitt'].

【问题讨论】:

    标签: ruby datamapper sqlite3-ruby ruby-datamapper


    【解决方案1】:

    正如property docs 所说,您可以通过将:key => true 传递给您的:name 属性来创建自然键,如下所示:

    class Name
      property :name, :unique => true, :key => true
    end
    

    这应该使您能够执行Name["Bill"] 或Name.get("Bill")。

    如果您将:key 添加到多个属性,您也可以拥有复合键。

    【讨论】:

    • 我很困惑:当我有id, Serial 和:name, :key=>true 时,auto_migrade 只为id 生成一个主键,为name 和id 生成2 个唯一索引。当我将Serial 更改为Integer, :unique=>true, :key=>true 时,auto_migrate 将生成PRIMARY KEY("id", "name")。为什么会这样?
    猜你喜欢
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    相关资源
    最近更新 更多