2017-07-17 57 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