PostgreSQL задача: триггер для расчета среднего - PullRequest
0 голосов
/ 26 февраля 2020

Мне нужна помощь в решении следующей проблемы.

Пусть две таблицы и связь между ними:

CREATE TABLE A (
    id SERIAL PRIMARY KEY,
    val REAL
);

CREATE TABLE B (
    id SERIAL PRIMARY KEY,
    val REAL
);

CREATE TABLE A_B (
    a_id INT NOT NULL,
    b_id INT NOT NULL,
    FOREIGN KEY (a_id) REFERENCES A (id) ON DELETE CASCADE,
    FOREIGN KEY (b_id) REFERENCES B (id) ON DELETE CASCADE
);

Мне нужно установить B (val) так, чтобы оно всегда было средним из всех A (val) тогда и только тогда, когда в A_B существует связь между ними. Как использовать триггер для него? Спасибо и извините за грамматику.

1 Ответ

0 голосов
/ 26 февраля 2020

Я бы предложил создать представление, чтобы раскрыть эту производную информацию. На самом деле хранить его бессмысленно, а поддержание целостности будет утомительным.

create view view_b as
select b.id, avg(a.val) val
from b
left join a_b ab on ab.b_id = v.id
left join a on a.id = ab.a.id
group by b.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...