Ответ 1
Во-первых, для [Level]
сохранение только идентификатора позволяет хранить простой тип в списке json.
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 [LevelId]
bids [LevelId]
deriving Show Read Eq
|]
В качестве альтернативы, если вам нужно запросить отношение, вам нужно определить таблицу "через" или "M2M", как в обычной структуре реляционной базы данных.
type Price = Int
type Volume = Int
share [mkPersist sqlSettings, mkMigrate "migrateBook"]
[persistLowerCase|
Level
limit Price
volumes [Volume]
deriving Show Read Eq
Book
time Time
deriving Show Read Eq
BookAsk
book BookId
level LevelId
BookBid
book BookId
level LevelId
|]
Как и в случае [Volume]
, проблема в persistent-postgresql. persistent жестко привязан к значениям PersistList
как JSON, вместо использования встроенной поддержки postgres для типов столбцов массива. Если вы хотите исправить это, вам необходимо отправить запрос или запрос на перенос.