Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

ソーシャルログインを複数実装した場合のユーザーテーブル設計を検討したい

お世話になっております。

WEBアプリで、LINE, Google, Yahoo, Twitter, Instagram, Facebook, Apple ID, Githubでログイン出来るようにしようと考えています。
ユーザーIDとパスワードのログインは、パスワード紛失や物理的な漏洩を考慮して、なしの方向で考えています。

その上で、ユーザーテーブルをどのように設計するのが最適か皆様の意見をいただけると幸いです。

データベースは MySQL8.0 です。

自分は下記のような設計を考えています。


userテーブル InnoDB
user_id binary(16) primary key
user_name  varchar(20) 任意設定 掲示板利用時等には設定を促す
email varchar(100) 任意設定
created_time datetime
updated_time timestamp デフォルト=CURRENT_TIMESTAMP
deleted_flag boolean デフォルト=0


line_login InnoDB 他の各SNS用にも同じカラムのテーブルを作る
user_id binary(16) 外部キー(RESTRICT) UNIQUE
password char(32) INDEX UNIQUE APIから発行される一意のIDをソルト付きハッシュ化
created_time datetime


userテーブルひとつに8つのSNSのログイン用文字列を持たすとインデックスが集中するのでダメかなとまずは思いました。

userテーブルのuser_idカラムでは、値を
UUID_TO_BIN(UUID(), 1)
とします。
第二引数の指定は再スワップすることで、クラスタインデックスの分散が抑止され、パフォーマンスが向上するかな?と考えました。

ソーシャルログイン時は、userテーブルとログインに選ばれたSNSのテーブルをINNER JOINして照会する方法を考えています。


自分の考えは以上です。
理解や認識の至らない部分はあると思いますが、皆様よろしくお願いします。

2

回答

28611

閲覧

2件の回答

評価

0

すみません、補足です。

webアプリは、springフレームワークで作っています。
SQLのチューニングを重視しているので、O/Rマッパーは使用していません。
また、ソーシャルログイン周りもJava標準ライブラリのHttpUrlConnectionで実装しています。

評価

0

Javaの話ではないようだが…。

>他の各SNS用にも同じカラムのテーブルを作る
key varchar(N) unique /*"line" "google" "yahoo" etc. */
じゃだめなの?

回答する

ログインしていません。

ログインしなくても回答はできますが、ログインすると、質問・回答の管理、更新があった場合のメールでの通知を受けることができます。 アカウントをお持ちでない方は会員登録を行ってください。

ユーザ名匿名