這是一個偏好,但我想知道人們認爲什麼是最佳選擇。我有一個問題,答案,以及點(因爲我需要跟蹤哪個用戶提出的觀點)數據庫表優化連接vs重複列
錶轉儲
Question:
id
title
Answer:
id
question_id
user_id
response
Point_Answer:
id
answer_id
user_id
points
因此,在這種佈局得到最多的回答就需要一個複雜的連接順序。
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 2010-09-27 20:09:04