私のウェブサイトには、スレッドを開始したり、スレッドに返信したり、投稿を削除したり、他の人の投稿を報告したりできるフォーラムがあります。
抽象化を行い、、(すべてのアクティビティに共通するフィールド)、およびアクティビティのタイプ(スレッド、応答、レポート、削除)と(それぞれに対応する)activity
を格納するというテーブルを作成することにしました。テーブル)。user_id
time
effective_id
id
当初、これは優れたアイデアのように思われました。冗長性を回避し、各テーブルに問い合わせることなく、特定のユーザーが行ったことを簡単に検索できるようになるためです。しかし同時に、この抽象化はより複雑なクエリをもたらし(たとえばINNER JOIN
、ほとんどすべての単純なクエリで使用する必要があります)、今ではより複雑なクエリで問題が発生しています。
だから私の質問は:私は正しい決断をしましたか?非常に高価なクエリが発生したとしても、実際の環境では完璧なデータベースを作成することが非常に重要ですか?