【问题标题】:How do I define a composite key in Persistent如何在 Persistent 中定义复合键
【发布时间】:2012-05-13 01:49:49
【问题描述】:

如何向 Persistent 声明我有一个主键是两个字段组合的表?

例如,假设我有一个包含 first_name 和 last_name 的表,那么在 SQL 语法中我需要类似:

CONSTRAINT pk_PersonID PRIMARY KEY (first_name,last_name)

谢谢,

【问题讨论】:

    标签: haskell persistent yesod


    【解决方案1】:

    您可以按照下面的代码使用Primary <field1> <field2> 语法。

    PrimaryCompositeWithOtherNullableFields
        foo String       maxlen=20
        bar String       maxlen=20
        baz String Maybe
        Primary foo bar   -- THIS LINE --
        deriving Eq Show
        enter code here
    

    以上代码取自https://github.com/yesodweb/persistent/blob/master/persistent-test/src/CompositeTest.hs#L74的测试之一

    This wiki page 解释了在持久化中定义模型的不同语法。它真的应该是 Yesod 书的一部分。

    【讨论】:

      【解决方案2】:

      参见http://www.yesodweb.com/book/persistent,唯一性部分

      Person
          firstName String
          lastName String
          age Int
          PersonName firstName lastName
          deriving Show
      

      这定义了一个由 firstName 和 lastName 组成的唯一键。

      【讨论】:

      • 默认情况下,有一个整数 id 字段作为主键并在内部使用。为什么需要特定的主键?如果你真的这样做,我认为你不能使用 vanilla Persistent 来做到这一点,你可能必须自己编写表格。
      • 我正在使用与现有应用程序共享的现有表...看来我需要通过一些解决方法来克服这个问题。
      • 您可能对土拨鼠感兴趣。它的 API 的许多部分与 Persistent 类似,但它具有一些额外的功能,包括复合键。此示例github.com/lykahb/groundhog/blob/master/examples/keys.hs 显示了一列自然键,但如果您向唯一约束添加更多列,则很容易将它们组合起来。
      猜你喜欢
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      • 2020-09-17
      • 2012-03-26
      相关资源
      最近更新 更多