はじめに
RailsでWebアプリを作るうえでデータベースの型という概念が存在します。
※C言語の静的型付け、変数宣言時に型を決めるのとはまた別です。
腑に落とすために学習した内容を記録します。
【結論】なぜデータ型を決めるのか
1. メモリの効率的な利用
2. データの整合性を保証
3. 演算の正確性
4. パフォーマンスの最適化
メリット
1. メモリの効率的な利用
■ 非効率的な例
例えば数値型の整数型int
と浮動小数点型float
を区別しない場合、以下のことが起こります。
①全ての数値を同一形式で保存する。
②最も汎用性が高く多くの情報を格納できる浮動小数点型が適用される。
③よって整数でも浮動小数点として扱われるため通常よりも多くのメモリを消費してしまう。
⇩
結果としてメモリの使用が非効率的になる。
■ 日付/時間型の例
日付/時間型には、日付型date
、時間型time
、タイムスタンプ型timestamp
があり
①日付型date
は年、月、日を表すデータ
②時間型time
は時、分、秒(ミリ秒やマイクロ秒)を表すデータ
③タイムスタンプ型timestamp
は日付と時間の両方を格納します。
日付型の場合は特定の日付を記録させるのに適していて、例えば誕生日やイベント開催日など、時間の情報が不要な場合に使用されます。
逆に時間型は具体的な時間(誕生日のイベント開催時間など)が重要で、日付は重要でないため、このように分離させてメモリの消費を抑え効率化させています。
2. データの整合性を保証
■ 未定義の場合
例えば、整数型int
が未定義で、ユーザーが「5」と入力した場合、システムはこれを数量として認識できず、エラーが発生するか誤った処理を行う可能性があります。
■ 定義の場合
システムが不適切なデータの入力を防いで、適切な処理を行います。
3. 演算の正確性
先ほどの2. データの整合性を保証
に繋がりますが、数値型であれば数学的演算、文字列型であればテキスト操作など、システムがデータ型に応じた操作を適切に行うことができます。
■ 未定義の場合
例えば、商品の価格が文字列型で保存されている場合。
文字列 ”100” と ”200” のを加算しようとすると、単に文字列連結され"100200"という風に正しい結果が得られない場合があります。
■ 定義の場合
100 と 200 の加算は正しく計算され、結果として 300 という数値が得られます。
4. パフォーマンスの最適化
■ 計算の遅延の例
浮動小数点数 float
の演算は整数 int
の演算よりもコストが高く、計算処理が遅くなる可能性があります。
■ 関数の最適化
(従業員の出勤時間と退勤時間を記録し、勤務時間を計算するシステム)
出勤時間と退勤時間が文字列で保存されていると、これらを日付/時間型に変換し、その差を計算するのに余計なステップとリソースが必要になります。
メリット
①効率的なデータ管理を行い、データの種類ごとに最適なストレージ方法を使用できる
②型を制約して、入力されたデータの不整合を防ぎ、エラーの低減に繋がる
③データ型を通じてデータの扱いが予測しやすくなり、プログラムの挙動の安定に繋がる