created_at и кстати какой лучше выбрать тип для хранения времени если время хранится в стиле 1606208106781
А чего бы время не хранить в специально созданном для него типе timestamp (даже timestamptz)?
Если очень хочется числом, то, видимо, BIGINT.
books и вот тут должен быть список книг пользователя их количество может быть от 0 до 100
Это вообще-то денормализация, которую не жалуют теоретики SQL и не очень любят ORM'ы. Подумайте, точно ли она вам нужна, т.к. большинство решений будет еще и плохо переносимо с одной СУБД на другую.
А так конкретно для postgres лучше всего колонку book сделать типа int[] (массив int). Можно и строкой, и хранить id через запятую там, но это уже какие-то лишние телодвижения.
как сделать так чтобы делая запрос чтобы получить информацию о пользователе я еще получал информацию еще о книгах
Сделать несложно, но будет дублирование данных. Например:
SELECT u.*, b.*
FROM users u
LEFT JOIN books b ON (b.id = ANY(u.books))
WHERE ...
Выдаст что-то типа:
name | surname | balance | created_at | books | id | title | author
______________________________________________________________________________________________________________
Alex | Smith | 22.10 | 1606349583252 | {2,10,88} | 2 | A Game of Thrones | George R. R. Martin
Alex | Smith | 22.10 | 1606349583252 | {2,10,88} | 10 | A Clash of Kings | George R. R. Martin
Alex | Smith | 22.10 | 1606349583252 | {2,10,88} | 88 | A Storm of Swords | George R. R. Martin