Я использую постоянный для сохранения следующих записей (время 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 предполагаемой записи.
Вопросы:
Как я могу настойчиво использовать настоящие простые типы (например, int и time) для столбцов вместо JSON для сложных типов?
Знает ли Persistent, как хранить отношение «многие ко многим»?
например учитывая запись A со списком :: [B], могу ли я заставить ее создать третью таблицу со списком
AId | B
-------
1 | b1
1 | b2 etc
Я использую следующие пакеты:
persistent-postgresql-1.0.3
yesod-persistent-1.1.0.1
Postgres 9.1
[Level]
, приводит к тому, что весь список сериализуется в одно поле, как вы заметили. Вы можете использовать такие идентификаторы, какBookId
иLevelId
, для ссылки на записи других таблиц. - person Michael Steele   schedule 18.12.2013