はじめに
ここ最近AWS(ECS)ばかり勉強していたため、久しぶりにRailsの勉強したのですが、マイグレーションの際のデータ型をすっかり忘れてしまったため、備忘録として残そうと思います。
データ型の種類
データベースにデータを保存する場合、データの形式を理解しておく必要があります。
このようなデータ形式のことを、「データ型」といいます。
代表的なデータ型には、以下のようなものがあります。
他にもデータ型はありますが、頻繁に使うものだけをピックアップしたので今回は省略します。
型 内容
string 文字列(255文字まで)
text 長い文字列
integer 整数
bigint 整数
float 浮動小数
decimal 精度の高い小数
datetime 日時
timestamp 日時(Unixtime)
time 時間
date 日付
binary バイナリデータ
boolean 真偽値(true or falseのように二択の際使われる)
文字列の扱い
文字列を扱う際は選択肢として、「string」 と「text」があります。
string は「255文字」までしか取り扱えないため、255文字以上になる可能性があるのであれば、「text」を選択します。
例えばユーザー名は文字数が少ないため「string」になります。
コメントのような長い文章を保存する場合は「text」になります。
メールアドレスは string でOKと言われていることが多いそうですが、どうでしょう。RFC5321 で reverse-path や forward-path で利用できるのが 256文字、これらには区切り文字として < , > が含まれるため、実際には 254文字 となります。そのため、メールアドレスは 「string」 で問題ないとなります。
それ以外で256文字以上となってしまう可能性や、その際に運用フェーズで変更に対応できるかを検討した上で決めましょう。
小数の扱い
小数を使用する場合は、丸め誤差についてきちんと検討する必要があります。
「float」の場合、精度を指定できないため、丸め誤差が発生しても良い場合にしか利用できません。
「decimal」では全体の桁数と小数点以下の桁数を指定できます。
t.decimal :hoge, precision: 12, scale: 2
例を読み解くと、全体の桁数を12にし、小数点以下の桁数を2としています。
これにより、誤差の問題を指定した精度のレベルでは解消することができます。
IDの場合
整数値のIDについてはいろんなパターンがあると思いますが、増加量が止まることが想定できないことがあるのであれば、「bigint」を選択するべきでしょう。
まとめ
データ型を選ぶ際にはいろいろと検討する必要がありますが、以下気をつけておくと良いかもしれません。
・必要なサイズ、精度が十分なものを選択する
・セキュリティ的に問題ない形式を選択する
・運用が始まって変更になっても問題ないか、問題があるならより変更が少ない方に倒す
・オプションなどをドキュメントで理解した上で使用する
今後もまとめを気にしつつ、とりかかれればいいなと思いました。
今回も見てくださりありがとうございました。