Задать вопрос
@dfhkjhg

Как добавить пользователю несколько id из другой таблицы?

Допустим есть талица user основная таблица где хранится вся информация о пользователе

[
name varchar
surname varchar
balance integer
created_at и кстати какой лучше выбрать тип для хранения времени если время хранится в стиле 1606208106781
books и вот тут должен быть список книг пользователя их количество может быть от 0 до 100
]
и как сделать так чтобы делая запрос чтобы получить информацию о пользователе я еще получал информацию еще о книгах (которая хранится в другой таблице)
Надеюсь понятно обьянил
  • Вопрос задан
  • 395 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@galaxy
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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы