У меня есть вопрос, что я не нашел для него ответа.Вычисленный столбец Postgresql
Вот пример:
Таблица: интересы
- ID: целочисленные - ключ
- первичное имя: имя интерес - уникальные
- популярность: интерес популярность
Таблица : пользователи
- ID: целое - первичный ключ
- электронная почта: строка - уникальный
- интересов: массив целочисленных - внешние ключи таблицы «интересов»
Я хочу, чтобы столбец «популярность» из «интересов таблицу, которая будет вычисляться благодаря таблице «users».
Таблица пользователей
id | email | interests
0 | toto0.gmail.com | [ 0 ]
1 | toto1.gmail.com | [ 0, 1 ]
2 | toto2.gmail.com | [ 1 ]
3 | toto2.gmail.com | [ 2 ]
Таблица интересы
id | name | popularity
0 | 'interest 0' | 2
1 | 'interest 1' | 2
2 | 'interest 2' | 1
3 | 'interest 3' | 0
Я попытался это:
UPDATE interests SET popularity = (SELECT COUNT(*) from public.users where ARRAY[interests] @> ARRAY[interests.id]);
Но я не хочу, чтобы выполнить запрос на обновление таблицы интересов. Я хочу сказать, что я хочу, чтобы столбец «популярность» автоматически заполнялся, когда пользователь подписывается на него.
Если я создаю «представление», как это, он должен работать так, как я хочу?
CREATE VIEW interests_popularity (id, popularity) AS
SELECT COUNT(1) as popularity, interest.id
FROM public.user, interest
WHERE ARRAY[public.user.interests] @> ARRAY[interest.id]
GROUP BY interest.id;
Есть ли более эффективный способ сделать это?
Я думаю, что я буду использовать задание cron для вычисления таблицы «interesets» один или два раза в день –