Codermania MySQL triggerdan bahsediyorum: https://dev.mysql.com/doc/refman/8.4/en/trigger-syntax.html
Mesela pivot tablonuz ratings olsun:
+---------+---------+--------+
| user_id | film_id | rating |
+---------+---------+--------+
| 1 | 1 | 8 |
+---------+---------+--------+
Özet tablonuz da ratings_summary olsun
+---------+------------+------------+
| film_id | vote_count | avg_rating |
+---------+------------+------------+
| 1 | 134 | 7.5 |
+---------+------------+------------+
DELIMITER //
CREATE TRIGGER after_insert_rating AFTER INSERT ON ratings FOR EACH ROW
BEGIN
DECLARE new_vote_count INT;
DECLARE new_avg_rating DECIMAL(5,2);
-- Yeni eklenen film için oy sayısı ve ortalama puanı hesapla
SELECT COUNT(*), AVG(rating) INTO new_vote_count, new_avg_rating FROM ratings
WHERE film_id = NEW.film_id;
-- Eğer ilgili film için summary kaydı varsa güncelle, yoksa ekle
INSERT INTO ratings_summary (film_id, vote_count, avg_rating)
VALUES (NEW.film_id, new_vote_count, new_avg_rating)
ON DUPLICATE KEY UPDATE vote_count = new_vote_count, avg_rating = new_avg_rating;
END;
//
DELIMITER ;
Artık ratings tablosunda bir değişiklik olduğunda ratings_summary otomatik güncellenecek. Sonra mesela filmleri oylamalar ile birlikte almak isterseniz:
SELECT f.id, f.title, rs.avg_rating, rs.vote_count
FROM films AS f
LEFT JOIN ratings_summary AS rs ON f.id = rs.film_id;