0
0

More than 3 years have passed since last update.

ユーザーの役割を分ける際はSQLアンチパターンを意識する

Posted at

●はじめに

Railsチュートリアルを参考にしポートフォリオを作成すると、Userモデルにadmin属性を追加しSTIで管理ユーザーを作成する事になるかと思います。
しかし、SQL的にはアンチパターンであるため注意が必要です。

●結論

Userモデルと別に、adminモデルを作成する事が良い。

●STI(Single Table Inheritance:単一テーブル継承)

STIは、単一の継承階層に所属するクラス群を、ひとつのテーブルを使って永続化する手法です。

スクリーンショット 2020-04-07 20.20.10.png

このように実装する方法ですね。しかしこの方法はSQL的にアンチパターンだという事です。
なぜこの方法が良くないかという点は、下記URLを参考にしました。
https://qiita.com/yebihara/items/9ecb838893ad99be0561

短所
・特定のサブクラスに固有の属性に対してNOT NULL制約を適用できない
・特定のサブクラスのみを参照すべき他テーブルの外部キー制約が、誤ったサブクラスを参照することを防げない
・テーブルのカラム数が多くなりやすい
・一部のサブクラスでしか使われない列の値はNULLばかりとなり、見た目がスパースになる

●まとめ

データベース設計時には、アンチパターンを意識する必要がある。
Rails初学者にとってSQLやDBは苦手意識を持ちやすい所だと思います(自分がそうです)
だからこそポートフォリオ作成前にはしっかりとデータベース設計をし、ER図を作成し、メンターに確認をして頂いた後に実装を進めることをオススメします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0