控制Database.Persist创建的模式

时间:2014-02-24 14:14:37

标签: sql sqlite haskell yesod

我正在学习Haskell,我的第一个真正的应用程序是使用Yesod + Database.Persist和SQLite后端的Web应用程序,但我找不到用persistLowerCase准引号指定一些东西的方法:

  • 如何声明指定的列应该被索引(没有唯一性约束)
  • 如何指定外键(我只能foreign_table_id ForeignTableId,转换为"foreign_table_id" INTEGER NOT NULL REFERENCES "foreign_table"
  • 如何指定列大小(例如VARCHAR(50)
  • 如何使用CHARBLOB作为列类型

最后两个对SQLite没有用,但我将来可能会改变数据库后端。

1 个答案:

答案 0 :(得分:1)

如果我没记错的话(来自InfoQ的Yesod演示文稿),必须手动添加索引,Yesod不支持自动执行。

可以通过在字段定义中键入maxlen=<size>来指定列大小。 BLOB可以存储为ByteString。两个字段的示例如下所示:

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
    Something
        b           ByteString
        t           Text         maxlen=30
|]

BLOB数据类型适用于Sqlite3,因为我过去曾使用过它,但我不确定maxlen属性,我只是读过它。您可以在Yesod书籍chapter about Persistent中找到更多详细信息。

至于外键,我的经验告诉我那些是同义词。只是不要忘记启用外键,因为它们是disabled by default