私は用途次第で、日付型と文字列型での日付表現を併用する方が良いと考えています。ただ、時刻情報を文字列で持ったことは今の所ないですね。
データベース上に保持する内容は、表現対象を概念レベルで捉えた時の在り方など色々重視すべき点があるかと思いますが、日付項目に関して開発者が注意すべき点は、実装において日付項目を完全一致で比較することがあるかどうかが、一つ気をつけておくべきポイントになるのではないか?と思います。
例えば、レコード登録時点で常に値が入るべきログ的な登録日時や、更新された際の更新日時などは表示や参照値、範囲指定での検索対象項目として使うでしょうから、日付型で問題はないと思いますし、素直にクエリが書けると考えます。ただし、時刻を除いた日付部分の完全一致を判定する必要がある場合、日付型で保持していると、そのままではミリ秒など細かい部分まで完全一致していなければ成立しないことになります。DB によっては対処が簡単な場合もあるのかもしれませんが、一般的に時刻を考慮せず日付部分だけ一致しているかどうかを判定する場合、日付型の加工なり、範囲で一致させるような手間が発生してしまうでしょう。こういった状況では文字列で日付部分だけを持つ優位性が出てくると思います。(レコード総数が問題ない規模なら日付も文字列も両方持ってしまうのも手だと思います)
それ以外だと、発生日の保持が必要な場合に、null 許可の日付型で作るか、YYYYMMDD形式の項目に空文字で登録するか?という差が出るぐらいでしょうか?この状況についても別テーブルのレコードの有無で表現し、outer join を使って判定する方法もありますし、設計者の思想次第の所がありますね。
日付項目の書式化に関しては、DBレベルでもそうですが、実装に使う最近の開発言語や道具立てにおいては、日付型に対する標準ライブラリレベルでのサポートが豊富ですから、書式化に関しては日付型に優位性があるように感じます。
以上、ご参考になれば幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。