sql >> データベース >  >> RDS >> Mysql

ソーシャルWebアプリケーションデータベースの設計:このスキーマをどのように改善できますか?

    全体として、現在の設定やスキーマに大きな欠陥は見られません。

    私が疑問に思っているのは、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、カウンターキャッシュ、パーティション化されたテーブルなどです。非常に具体的なもの/テクノロジー/テクニック/ ...がある可能性があるため、ユーザーが実際にオーバーランしている場合は、このようなことについて話し合うことができます。あなたの問題に。



    1. Oracle-スタンドアロンのプロシージャや関数の代わりにパッケージを使用する必要があるのはなぜですか

    2. org.hibernate.internal.util.config.ConfigurationException:cfg.xmlリソースが見つかりませんでした[/HibernateTest/src/hibernate.cfg.xml]

    3. PostgreSQLでUnixタイムスタンプを返す

    4. Android用SQLiteデータベースのパフォーマンスを向上させる方法