2017-07-17 73 views
2

使用以下代碼時,我不想使用默認數據庫鍵。 Intead,我打算從一條信息中生成一個哈希碼並將其用作關鍵字。我應該如何使用這樣的密鑰?Haskell持久數據庫主鍵

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase| 
Person 
    name String 
    age Int Maybe 
    deriving Show 
BlogPost 
    title String 
    authorId PersonId 
    deriving Show 
|] 
+0

你在使用什麼庫。 – SwiftsNamesake

+0

Persistent.sqlite – WellTyped

+1

數據庫密鑰是什麼意思?作爲主鍵的列? –

回答

3

一個代碼演示這樣的想法:

#!/usr/bin/env stack 
{- stack 
    --resolver lts-7.14 
    --install-ghc 
    runghc 
    --package persistent 
    --package persistent-template 
    --package persistent-sqlite 
-} 

{-# LANGUAGE EmptyDataDecls #-} 
{-# LANGUAGE FlexibleContexts #-} 
{-# LANGUAGE GADTs #-} 
{-# LANGUAGE GeneralizedNewtypeDeriving #-} 
{-# LANGUAGE MultiParamTypeClasses #-} 
{-# LANGUAGE OverloadedStrings #-} 
{-# LANGUAGE QuasiQuotes #-} 
{-# LANGUAGE TemplateHaskell #-} 
{-# LANGUAGE TypeFamilies #-} 

import Database.Persist 
import Database.Persist.Sqlite 
import Database.Persist.TH 

share 
    [mkPersist sqlSettings, mkMigrate "migrateAll"] 
    [persistLowerCase| 
Blogpost 
    topic String 
    hash String 
    Primary hash 
    deriving Show 
|] 

main :: IO() 
main = mockMigration migrateAll 

注意,上面的代碼會產生這樣的輸出:

CREATE TABLE "blogpost"("topic" VARCHAR NOT NULL,"hash" VARCHAR NOT NULL, PRIMARY KEY ("hash")) 

你可以看到blogpost表的主鍵是如何hash

+0

太簡單了!謝謝! – WellTyped