次のレコードを保存するために永続的に使用しています (時間は UTCTime です)。
type Price = Int
type Volume = Int
share [mkPersist sqlSettings, mkMigrate "migrateBook"]
[persistLowerCase|
Level
limit Price
volumes [Volume]
deriving Show Read Eq
Book
time Time
asks [Level]
bids [Level]
deriving Show Read Eq
|]
構造を移行すると、Book テーブルが得られます。
CREATE TABLE book
(
id serial NOT NULL,
"time" timestamp without time zone NOT NULL,
asks character varying NOT NULL,
bids character varying NOT NULL,
CONSTRAINT book_pkey PRIMARY KEY (id )
)
およびテーブル レベル:
CREATE TABLE level
(
id serial NOT NULL,
"limit" double precision NOT NULL,
volumes character varying NOT NULL,
CONSTRAINT level_pkey PRIMARY KEY (id )
)
ブックを挿入すると、レベル テーブルは空のままになり、ブック テーブルには目的のレコードの JSON バージョンを含むエントリが含まれます。
質問:
複雑な型の JSON ではなく、実際の単純な型 (int や time など) を列に使用するように永続化するにはどうすればよいですか?
Persistent は多対多の関係を保存する方法を知っていますか?
たとえば、リスト :: [B] を持つレコード A が与えられた場合、次のように 3 番目のテーブルを作成することができますか?
AId | B
-------
1 | b1
1 | b2 etc
次のパッケージを使用しています。
persistent-postgresql-1.0.3
yesod-persistent-1.1.0.1
Postgres 9.1