プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • データベース
  • 【データベース設計】ユーザーテーブルの設計について考えてみる。
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【データベース設計】ユーザーテーブルの設計について考えてみる。

04.08

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

ユーザーテーブルの設計に必要な情報をまとめました。

必要な情報

利用するアプリによって、色々分かれるとは思いますが、必要そうと思われる情報を書き出してみます。

項目 データ型  説明
ユーザーID 数値型(INT)  ログインIDとひとまとめにしてしまう場合もあります。
ユーザー名
ログインID 固定長(VARCHAR)  ユニーク制約をかける。
パスワード VARCHAR  平文ではなく、暗号化関数等でハッシュ化した値を入れます。
作成日 DATE レコード挿入日を入れる。
更新日 DATE レコード更新日を入れる。
削除日 DATE ここに日付が入っているレコードは論理削除されたとみなす。

ユーザーIDとログインIDは別にするのか?

色々ありますが、分けるメリットデメリットは下記です。

メリット

ユーザー情報と、ログイン情報を別々にできるので、ユーザー情報だけ保管したりできる。

例えば、ユーザーがそのシステムを退会した場合でも、ユーザー情報だけ論理削除して、ログイン情報は物理削除する等ができたりします。

デメリット

DB設計がわかりずらくなります。特に小規模なシステム等では、ユーザーとログイン情報はまとめてしまうということが多いかもしれませんね。(むしろ、わかりやすさを重視してこれが大半のようです。)

では、どう設計するか?

ユーザーIDとログインIDを分けない場合

USER(ユーザーテーブル)
項目  説明
ユーザーID(兼ログインID) 主キーにする。
ユーザー名
パスワード
作成日 レコード挿入日を入れる。
更新日 レコード更新日を入れる。
削除日

非常にシンプルですね。

ユーザーIDとログインIDを分ける場合

1.ユーザー情報もログイン情報も一つのテーブルにしてしまう。

USER(ユーザーテーブル)
項目  説明
ユーザーID 主キーにする。
ユーザー名
ログインID  ユニーク制約をかける。
パスワード
作成日 レコード挿入日を入れる。
更新日 レコード更新日を入れる。
削除日

一つにまとまっているので、非常にわかりやすいですね。

ただ、これだと、ユーザーレコードを物理削除しないのであれば、いなくなったユーザーのログインIDが使えなくなってしまいます。

2.ユーザー情報と認証情報を別々にテーブルにして、それぞれ主キーを設定する。

USER(ユーザーテーブル)
項目 説明
ユーザーID 主キーにする。
ユーザー名
作成日 レコード挿入日を入れる。
更新日 レコード更新日を入れる。
削除日
AUTHORIZATION(認証テーブル)
項目 説明
ユーザーID ユーザーIDの外部キーにする。
ログインID 主キーにする。
パスワード
作成日 レコード挿入日を入れる。
更新日 レコード更新日を入れる。

これなら、論理削除されたユーザーIDがいた場合は、AUTHORIZATIONテーブルだけ物理削除すれば、ログインIDが欠番になることはなくなりますね。

スポンサーリンク
  • 2018 04.08
  • miyabisan2
  • コメントを書く
  • データベース
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 04.08

    【データベース】「外部キー」、「リレーション」について

  2. 2018 04.25

    【データベース設計】基本的な流れ

  3. 2018 04.29

    【データベース設計】ストレージの冗長構成(RAID)の決定(物理設計)

  4. 2020 08.15

    【DBスペシャリスト】データベースのクラスタ構成、「テーブル」の「物理分割:パーティション」

  5. 2021 11.23

    【Redis】データ型の種類と用途、ユースケース(キャッシュ)

  6. 2020 08.12

    【DBスペシャリスト】スーパータイプ、サブタイプ

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Android】Android Studioでの画面…

【データベース】「外部キー」、「リレーション」について

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー