2012-03-08 8 views
1

FacebookやGoogle+を含む複数のソースからユーザーがサイトにログインするようなWebサイトを構築しています。私のデータベースの各ユーザーには、コメントや投稿などの作成を追跡できるようになりました。どのように効率的にこれをSQLデータベースで行うのですか?ユーザーの種類ごとに新しいテーブルを作成しますか?複数のタイプのユーザーを1つのデータベースにまとめるにはどうすればいいですか

答えて

3

通常のアプローチがある:

  • Facebookの特定データと共通データとUSERテーブル
  • FACEBOOK_USERテーブル(それ自身のPKとUSER FKだ有する)
  • GOOGLE_USERテーブル...

ユーザーを読み込むときに、すべてのテーブルを結合することも、多くの特殊な型がある場合は、ユーザーを読み込んで個別に読み込むことができます(USERのテーブルにIS_x_USERを保存しておくとよいでしょう)。

+0

お返事ありがとうございました。これは多くの意味があります。 –

4

ユーザーテーブルとユーザータイプテーブルの2つのテーブルが必要です。ユーザテーブルには、ユーザタイプテーブルにリンクしてそのタイプを示すタイプのカラムがあります。 Google+ではやFacebookのようなタイプの各ログに固有の情報を持っている場合は、タイプの各特定のログ用のテーブルを作成することができ

User (
    Id Int NOT NULL PRIMARY KEY, 
    UserName VarChar(50) NOT NULL, 
    EmailAddress VarChar(100), 
    {... More fields generally used by all account types ...} 
    UserTypeId Int NOT NULL 
) 

UserType (
    Id Int NOT NULL PRIMARY KEY, 
    Type VarChar(50) NOT NULL 
) 

:私はこのような基本的なものになるだろう。しかし、現実には、可能な限り異なる種類のすべての基本情報フィールドが同じになるため、心配することはほとんどありません。

+0

お返事ありがとうございます。 usertypeテーブルはユーザテーブルのユーザIDのようになり、タイプ番号などとなりますか?このメソッドは、私はFacebookやGoogleから実際のユーザーIDを格納することができますか?それは私が走っていた問題だったので、IDを重複する可能性なしに、そのIDを格納したいのですか?複数のテーブルを作成する必要があるようでした。 –

+0

したがって、User.Idは各ユーザーに固有です。ただし、2人のユーザーが同じUserNameを持つことはできますが、異なるUserTypeIdを持つことができます。この場合、User.Id列を使用して、ユーザーが情報を作成したユーザーを他の各テーブルで識別します。 –

関連する問題