DB設計

WEBサービスでよくある機能を実装しようした場合、どういうDB設計がベストなのかよくわからない。

  • ユーザー認証
    • メールアドレスログイン
    • SNSログイン
  • プロフィール登録

このあたりの標準機能を実現するのに、みなさんはどういうDB設計をされているのか気になっています。

以下、僕が考えたDB設計です。
おかしなところがあったらご指摘いただけると嬉しいです。

UserData

ユーザー一覧画面などの表示で使いそうなものはなるべくここに入れておいて、joinしなくても良いようにする。

  • user_id
  • nickname
  • regist_date

UserDataProfile

性別だとか、自由テキストだとかなんでも入れておくテーブル。自由度高すぎか。

  • user_id
  • profile_type
  • profile_value

UserDataAuth

メールアドレスと暗号化パスワードを保存しておく。極力引き出さないように、UserDataとは別テーブルに保存。

  • user_id
  • mail_address
  • password

UserDataSNSAuth

TwitterなどのSNSログインもあることを考慮。

  • user_id
  • sns_type
    • twitterなどの値
  • sns_id
    • twitterアカウントなどの値
  • sns_auth_token
    • ログイン後のトークン