全体として、現在の設定やスキーマに大きな欠陥は見られません。
私が疑問に思っているのは、3つのUser*テーブルに分割されていることです。私はあなたがあなたの意図したものを(異なるユーザー関連のものを別々に持っている)得ますが、私がまったく同じことをするかどうかはわかりません。 User
からのデータのみを表示する場合 サイトのテーブルでは、これは問題ありません。同じページで他の情報が複数回必要になることはありませんが、ユーザーが本名を使用して本名を表示する必要がある場合(doe55ではなくJohn Doeなど)、速度が低下します。 可能性があるためにデータが大きくなったとき 参加が必要です。 Preferences
を持つ 個別の選択は個人的な選択のようです。私はそれに賛成でも反対でも議論はありません。
多対多のテーブルには、追加のPK(PostFavoriteID
など)は必要ありません。 )。両方のPostID
のプライマリを組み合わせたもの およびUserID
PostFavoriteID
なので、十分です 他の場所では使用されません。これはすべての結合テーブルに当てはまります
前と同じように答え、私は長所や短所を見ていません。私はかもしれません NULL
以降、両方を同じテーブルに配置します (またはおそらくより良い-1
)値は気になりません。
ViewCount
の増分を処理するトリガーを使用して、それらを同じテーブルに配置します テーブル
正規化されたスキーマを使用しているため、いつでも追加を行うことができます。
言うことはできませんが、まだ実行していませんが、Solrは非常に強力で柔軟性があることを知っているので、うまくやるべきだと思います。
たくさんあります これについて議論しているSOのスレッド。個人的には、intの検索が簡単になるため、クエリがより簡単かつ高速になるため、代理キー(または使用可能な場合は別の一意の数値キー)の方が好きです。ユーザー名/電子メール/whatever-your-PK-isの変更を許可する場合は、大規模な更新が必要です。代理キーがあれば、気にする必要はありません。
また、created_at
のようなものを追加します 、last_accessed
at(トリガーまたはプロシージャIMOを介して行うのが最適)で、いくつかの統計情報をすでに利用可能にします。これは本当にあなたに貴重な統計を与えることができます
パフォーマンスを再現するためのさらなる戦略は、memcache、カウンターキャッシュ、パーティション化されたテーブルなどです。非常に具体的なもの/テクノロジー/テクニック/ ...がある可能性があるため、ユーザーが実際にオーバーランしている場合は、このようなことについて話し合うことができます。あなたの問題に。