我想使用Database.Persistant为Scotty应用程序创建数据库,并且我无法弄清楚在表之间添加外键约束的语法。例如,我有一个User
表和Post
表,并且我希望Post
表的属性为authorId
,其参考User
中的UserId
。这可以很容易地在原始SQL中完成,但是我希望能够通过haskell访问数据而不诉诸原始的sql命令。此外,约束将覆盖数据库迁移。这是我目前所面对的定义数据库:Yesod/Persistent中的外键约束?
share [mkPersist sqlSettings, mkMigrate "migrateAll"]
[persistLowerCase|
User
name String
email String
username String
Primary username
deriving Show
Post
title String
content T.Text
author String
deriving Show
|]
这是好的,但没有主要制约因素,它可以是一个非常糟糕的事情。 如果我尝试添加外键约束如the wiki on github说,通过将Foreign User authorfk author
行添加到Post
块,它编译得很好,但没有任何反应;不会发生迁移,也不会引入外键约束。
我在做什么错?任何援助或建议将不胜感激。
要清楚,我想要的是Post中的作者属性以引用User中的现有用户名。
谢谢,这很有道理。至于sqlite不尊重外键约束,这很烦人,但我会研究它。可能不得不切换到postgres或mysql。 – asg0451
还有一个页面在GitHub上的SQLite中讨论外键https://github.com/yesodweb/yesod/wiki/Activate-foreign-key-checking-in-Sqlite – zigazou