120

さまざまなユーザーの詳細を MySQL データベースに保存しています。もともと、データは UserIds とリンクされ、必要に応じてデータを表示および操作するための複雑な呼び出しを介して出力されることを意味するさまざまなテーブルに設定されていました。新しいシステムをセットアップする場合、これらすべてのテーブルを関連コンテンツの 1 つの大きなテーブルに結合することはほとんど理にかなっています。

  • これは助けになりますか、それとも邪魔になりますか?
  • 呼び出し、更新、または検索/操作の速度に関する考慮事項は?

私のテーブル構造の例を次に示します。

  • users - UserId、ユーザー名、電子メール、暗号化されたパスワード、登録日、IP
  • user_details - Cookie データ、名前、住所、連絡先の詳細、所属、人口統計データ
  • user_activity - 投稿、最終オンライン、最終閲覧
  • user_settings - プロフィール表示設定
  • user_interests - 広告のターゲティング可能な変数
  • user_levels - アクセス権
  • user_stats - ヒット、集計

編集:これまでのすべての回答に賛成票を投じました。それらにはすべて、本質的に私の質問に答える要素があります。

ほとんどのテーブルには 1 対 1 の関係があり、これが非正規化の主な理由です。

これらのセルの大部分が空のままである可​​能性が高いときに、テーブルが 100 列以上にまたがると問題が発生しますか?

4

8 に答える 8

7

Wordpress と同じアプローチを使用して、誰もが持っている基本的なユーザー情報を含む users テーブルを作成し、基本的に任意のキーとユーザー ID に関連付けられた値のペアである "user_meta" テーブルを追加します。したがって、ユーザーのすべてのメタ情報を見つける必要がある場合は、それをクエリに追加するだけです。また、ログインなどに不要な場合は、常に追加のクエリを追加する必要はありません。このアプローチの利点は、Twitter ハンドルや個々の興味を保存するなど、ユーザーに新しい機能を追加することもできます。また、関連付けられた ID の迷路に対処する必要もありません。これは、すべてのメタデータを規定する 1 つのテーブルがあり、50 ではなく 1 つの関連付けのみに制限するためです。

Wordpress は特に、プラグインを介して機能を追加できるようにするためにこれを行います。したがって、プロジェクトをよりスケーラブルにすることができ、新しい機能を追加する必要がある場合でも、データベースを完全にオーバーホールする必要はありません。

于 2013-05-07T14:46:50.250 に答える