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して照会する方法を考えています。
自分の考えは以上です。
理解や認識の至らない部分はあると思いますが、皆様よろしくお願いします。