2011-01-02 8 views
1

あなたの意見は、例えば、 facebookは接続しますか? http://facebook-developer.net/2008/08/05/optimize-your-database-tables-for-facebook-connect/dbデザイン - サードパーティサービス(facebook connectなど)でサインインする

提案された解決策:私はいくつかの研究をしたとき

は、私が(例えばFIRSTNAME、姓を、...)アカウント情報からログイン情報を(fb_id、...)を分離するための提案を見つけましたこの記事の3つのテーブル

TABLE accounts
idのint(11)NOT NULLとAUTO_INCREMENT、
nameテキストを作成は、ある
emailテキスト、
プライマリキーidid
);

TABLE users
username VARCHAR(255)NOT NULL、
passwordテキスト、
account_idのint(11)NOT NULL、
PRIMARY KEY usernameusername
)を作成します。

(INT(11)NOT NULL、
PRIMARY KEY fb_uidfb_uid

account_id
fb_uid BIGINT(11)デフォルトのNULL、
email_hash VARCHAR(64)デフォルトのNULL)TABLE facebook_usersを作成します。

私は1つのテーブルにすべてのデータを格納するだけの理由がないという明確な議論はありません。

テーブルのユーザー( のuser_id、 ユーザ名、 電子メール、 fb_id、 email_hash、 ... )

人は通常、唯一のFacebookのアカウントを持っているので、私はで何か問題が表示されません冗長性。 提案がありますか?

答えて

1

有効性のために、単一のテーブルを使用してすべてのデータを保持することは正しいです。また、別のログインサービスを追加するときに新しい列を追加するだけで済みます。

しかし、パフォーマンスは、ユーザーがFacebookのアカウントを持っているかどうかを知りたい場合は、分離されたテーブルよりも悪いです。データベースは "email_hash"のレコード全体を取得する必要があるため、ログインのパフォーマンスは悪化します。

一方、ユーザーのデータのリストは、そのようなレポートの表を結合する必要がないため、単一の表の設計でパフォーマンスが向上します。