属性
永続化

オブジェクトの属性「年齢」って何?

More than 1 year has passed since last update.

 これが、例えば「入社時の年齢」や「誕生日」であればわかりますが、「年齢」となると、それはある時点での数値ですから随時計算が必要になりますね。しかもその「ある時点」とはいったい何でしょう?
ウィキペディアのように、その人物を「照会した時点」で動的に計算するというイメージでしょうか。つまりいずれにしても仕様が曖昧ということですね。

 人物オブジェクトの属性を考えるとき、安易に「年齢」を使用しますが、話が「永続化」に進むとき、それは慎重であるべきです。というのも(故人でなければ)「年齢」は時間に対して可変であり、また「誕生日」から導出できる情報だからです。
  例えば、売上データで「合計金額」は商品の「単価」と「数量」から導出されるものであり、通常永続化すべき情報ではありません。何故なら、後日、単価や数量に変動があった場合、データベースを矛盾なく修正するには大きなコストがかかる(*注1)ことと同時にその対応自体がナンセンスだからです。

  以上のことはデータベースの論理設計において正規化を行う上で吟味するとよいでしょう。


*注1)データベースの関連個所を一斉に更新するバッチ処理が必要となり、またその実施タイミングを含め大きな課題となる。