そこで今回は、図書館の利用者の年齢を表示してみましょう。
利用者テーブルに、どんなフィールド(列)を追加すると、年齢を表示することができるか、考えてみてください。
一番簡単に思い付くのは、「年齢」のフィールドを追加することです。
しかし年齢は、時間が経てば変化します。
リレーショナルデータベースでは、基本的に、計算して出せるデータは、テーブルに保存しません。クエリやSQLを使って、計算して表示します。
ではどんなデータがあれば、年齢が計算できるでしょうか?
そうですね。利用者の生年月日がわかれば、年齢は計算して出すことができます。したがって、利用者テーブルに追加するフィールドは、「生年月日」ということになります。
あとはクエリやSQLを使って、仮想テーブルを作成し、演算フィールドで年齢を表示することができます。
現在の年から誕生日の年を引けば、簡単に計算できますね。
このような計算をするフィールドを、「演算フィールド」といいます。演算フィールドを使うことで、テーブルに無いフィールドを表示することができます。
ただし、年齢を計算する時には注意が必要です。例えば、現在の日付が 2008年11月19日 だとします。
利用者CDが 9 の「和田 恵」さんは、誕生日が12月11日なので、今年はまだ誕生日を迎えていません。西暦の年だけで単純計算すると、1歳多くなってしまいます。
したがって満年齢を計算する時は、もう少し複雑で、現在の日付が誕生日未満か以降かまで、考慮する必要があります。
でも大丈夫です。クエリやSQLでは、複雑な計算も行なうことができます。
以下は満年齢で計算した結果です。
これで今年の誕生日がまだの人の年齢も、ちゃんと表示することができました。
以上のように、リレーショナルデータベースの設計を行なう時は、出力したいデータをそのまま保存するのではなく、元になるデータと、その処理も考えて、設計する必要があります。
【ワンポイント】
今回のような計算は、「データベース側」でも「プログラム側」でもできます。
基本的に、データベース側でできることはデータベースで行い、プログラム側では、処理結果を受け取って利用します。
そのほうがプログラムが短くて済むので、ソースコードがシンプルになります。もちろんシステム開発の効率もアップします。