Это скорее предпочтение, но мне было интересно, что люди считают оптимальным вариантом для выполнения. У меня есть вопрос, ответ, и точка (потому что мне нужно отслеживать, какой пользователь сделал пункт)DB Table Optimization join vs repeat columns
Таблица Dump
Question:
id
title
Answer:
id
question_id
user_id
response
Point_Answer:
id
answer_id
user_id
points
Таким образом, в этой схеме, чтобы получить Top ответ потребует сложной последовательности соединения.
SELECT t2.id, t2.user_id, t2.response, MAX(points)
FROM Question as t1,
(SELECT qa.*, SUM(pa.points) as points
FROM answer as qa, Point_Answer as pa
WHERE qa.id = pa.answer_id
GROUP BY qa.id) as t2
WHERE t1.id = %s AND t1.id = t2.question_id
Где, если я изменил его так:
Question:
id
title
Answer:
id
question_id
user_id
response
points
Point_Answer:
id
answer_id
user_id
points
Запрос будет меньше обременять
SELECT A.id, A.user_id, A.response, MAX(points)
FROM Question as Q, Answer as A
WHERE Q.id = %s AND Q.id = A.question_id
GROUP BY A.id
Также будет означать, я бы убедиться, когда Point_Answer добавляется ответ. очки добавляются. Таким образом, в основном дополнительное ОБНОВЛЕНИЕ. В принципе, это «Целостность и избыточность» и немного оптимизация, каков будет лучший способ?
Хорошо, что имеет смысл, он еще не находится в развертывании, но задавался вопросом, с чего лучше всего начать. Я поеду с первой опцией и пойду честно. Если я увижу проблему позже, я всегда могу пойти на второй вариант. – Atherion