Postgresのヒント:「結合は無料」というのは真実ではありませんが、便利です。非正規化したいという衝動を抑え、ユーザーの悩みの種でどうしても必要な場合にのみ実行してください。開発者は「高速だから」と非正規化を勧めてきますが、実際のユーザーから苦情が出るまでは必ず「ダメだ」と言いましょう。
開発者が非正規化と結合について議論するもう一つの理由は、クエリの複雑さです。彼らは大量の結合を使わずに、よりクリーンで読みやすいクエリを書きたいと考えています。この問いに対する答えは、いつも「git gud」のような言い回しです。SQLを学んでください。私たちは、どうしてもできないまで、あらゆるものを結合していきます。
「結合を使えばいい」というのは、@lisamahapatra がいつも私をからかう「ジョニズム」の一つです。データモデルについて議論する電話会議のたびに私がこれを言うからです。みんな私がこれを言うだろうと分かっています…というか、彼らは私を誘い込もうとしているのだと思います。
@lisamahapatra このスレッドは、現在速度向上のために非正規化を行っていることから着想を得ました。問題のテーブルは十分に大きく、データモデルがもはや流動的ではないという点で十分に安定しているため、戦略的な非正規化を行うことで、EXPLAIN ANALYZEで検証可能な結果が得られます。
@lisamahapatra はい、データモデルが安定していて、それがパフォーマンスの問題ではなく、DXの問題だけであれば、ビューは素晴らしいです。モデルが安定し、コードで結合を記述する柔軟性が不要になったら、非正規化(パフォーマンス重視)かビュー(DX重視)のどちらかになります。