Я использую постоянное сохранение следующих записей (время UTCTime).yesod persistent postgresql complex record
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
|]
Когда я перенесу структуры я получаю книги таблицы:
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 и время) для столбцов вместо JSON для сложных типов?
Неустанно знать, как хранить отношение многих ко многим?
например. учитывая рекорд со списком :: [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', чтобы ссылаться на записи других таблиц. –