2010-12-02 6 views
0

私は自分のサイトにユーザープロファイルを作成しており、これを設計する方法を忘れています。いくつかのフィールドがあります.1:1のような1:1の住居、誕生日などです。お気に入りの映画、スポーツチーム、デートの好み、スクリーンネーム、電話番号、電子メールアドレスなど、多くの(または多種多様な)50のフィールド1:私たちは以前の企業、以前の学校などで働いたときにはもっと複雑になります。人は多くの企業に所属することができ、日付、勤務先、会社名、業界名など、このグループには多くのフィールドがあります。ソーシャルネットワーク - ユーザープロファイル設計のスキルに関する質問

これはどのように保存するのですか?これらのプロファイルフィールドをすべて正規化すれば、多数のテーブルを結合できます。私が読んだ限り、ソーシャルネットワークの人々は非正規化アプローチを推奨しています。しかしどちらにしても、すべてのユーザーの詳細とプロファイルの詳細をメインユーザーテーブルに格納しているので、各行は一意のユーザーです。これらの複数の設定をすべて保存する必要がある場合、お気に入りの映画のようなものは数百になる可能性があり、過去の会社自体がフィールドのグループ全体を持っているので、ユーザーテーブルに重複が多数あります。

ソーシャルネットワークはこれにどのようなアプローチをとっていますか?

答えて

3

ソーシャルネットワークのデータ保管に関する質問は、一般的なデータ保管に関する質問と変わりありません。正規化された関連データは、このデータを効率的に「保存」するための最良の方法です。 RDBMSは、これらの関係を処理するように作られています。つまり、PK-FK関係とJOINSはリレーショナルDBのMAINポイントなので、結合ジョインなどを参照しても、DBはこれらのジョインを効率的に処理する必要があります。適切なデータを取得するの利用という観点から

- あなたのインデックスが正確であり、最適化されたことを確認してください - あなたは表示目的のために必要なデータを「フラット化」するビューの利用を作る...

だから、何でもデータを取得するために使用しているアプリケーションサーバーがVIEWを呼び出すと、デベロッパーの皆さんにはデータの「フラット」表現として「表示」され、UIとAPPのセラーの相互作用がよりクリーンでより効率的になります(リソース、符号化において)、

一般的なガイドラインとして - データのフラット化は、データウェアハウス環境では一般的に「受け入れられる」と考えられています...もちろん、私は「正規化された、正規化された」という巨大な議論を開くべきではありません - 正規化の6番目の形式...)

OLTPよりもSNがOLAPのほうがいいと思います。どのような場合には、正規化されていないデータストレージが一般的で許容可能なものですか。実際には、あなたが物事をどのように正規化したかを判断することができます。例えば、あなたの例では、就職履歴や映画、スポーツなどです。あなたは、の正規化戦略に固執する必要があり、役立ったことを願っています

+0

なぜ、人々はソーシャルネットワークの非正規化ルートに行くのですか?それとも、facebookやgoogleのような大人がそれをして世界がそれらをコピーしなければならないからですか? – earl

+0

私はすっごく「はい、かなり」と言いたい。しかし、それは火炎戦争を起こす危険性があります。私は代わりに答えをアップアップします。 – Ronnis

0

を、このような項目についての多くの可能重複したエントリは大丈夫だろう、おそらく保守が容易...

:私は、単純な1だと思うだろうあなたのスキーマを作成します。クエリは、特にあなたがドットの開発者である場合、私はLINQがあなたのためにdの痛みを処理すると思います。私はあなたのRDMSがあなたの優れたパフォーマンスのクエリ。私が言ったように、LINQはこれを最もうまくやらなければなりません....歓声

関連する問題