我想使用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