Jeżeli ktoś znajdzie chwilę, bardzo prosze o ocenę schematu bazy danych aplikacji. Jest to taki mini quiz, gdzie są również inne czynności dodatkowo punktowane. Poniżej zamieszczam sql
widoków, których nie ma na schemacie. Dodatkowo do widoku user_answers
jest podpięty trigger instead of insert, który wprowadza dane do user_question
. Dziękuję za słowa krytyki.
CREATE VIEW user_answers AS
SELECT
au.user_id,
au.answer_id,
au.question_id,
a.is_correct,
q.points
FROM user_question au
INNER JOIN answers a ON au.answer_id = a.id
INNER JOIN questions q ON au.question_id = q.id
CREATE VIEW user_points AS
SELECT
user_id,
'answered_question' AS action_type,
points
FROM user_answers
WHERE is_correct = TRUE
UNION
SELECT
user_id,
name AS action_type,
points
FROM activities
CREATE MATERIALIZED VIEW ranking AS
SELECT
user_id,
row_number()
OVER (
ORDER BY points DESC) AS ranking,
points,
0 AS change --będzie dociągane z tabeli audytowej
FROM (
SELECT
user_id,
sum(points) AS points
FROM user_points
GROUP BY user_id
UNION
SELECT
id AS user_id,
0 AS points
FROM users
ORDER BY user_id
) total;