民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

zoom RSS 激論 YYYYMMDD

<<   作成日時 : 2009/05/08 00:07   >>

ブログ気持玉 0 / トラックバック 0 / コメント 6

データベースに日付データを格納することになった。
将来、もしかしたら、日付型のデータを持たないDBMSを使用することもあるかも知れないので、日付型を使わないことにした。
とすると、1970年1月1日からの秒数、いわゆる UNIX TIME を使用して数値型のフィールドに放り込むか、あるいはテキスト型のフィールドに YYYYMMDD 形式の文字データを放り込むかのどちらかにしておけば、後々の取り扱いが便利だろうと私は勝手に考えた。

しかし、知人は数値型のフィールドを用意して、そこに YYYYMMDD 形式のデータを数字として突っ込んでしまった。

「数字以外のデータが入るのを防ぐことができるから」
「変換関数がある(DMBS 固有?)から、特に不便はない」
「よく見かけるテクニックだ」

とのこと。

一連のシステムの中で統一が取れていれば、数値型だろうが、テキスト型だろうが、私はどちらでも構わないのだが、そのままでは足し算も引き算もできない YYYYMMDD 形式のデータを数値フィールドに放り込むというのは、少し抵抗があった。

世の中、どちらが普通なのだろうか?

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(6件)

内 容 ニックネーム/日時
論じるほどの意欲があるひとはみんな 数値カラム反対だろうから、不戦勝ですね。

実務での敗因は、「日付型のないデータベースへの移植」を考えてしまったことなんじゃないかと思いますが。
yaemon
2009/05/08 09:53
えーっ? Oracle なんかだと Number(8) なんて使い方をしているサンプルがネット上でみつかりますよ。
COBOL 経験者だと PIC 9(8) とデータ項目を定義するでしょうし。
また、数値型だと、long(4バイト)型でYYYYMMDD データを格納できて効率がいいですし、年、月、日を取り出す場合にも、割り算と余りの計算で済みますし。

と、数値型を擁護してみようとしても、やはり「そのまま加減乗除するわけでもないのに数値型」というのに違和感が残ってしまいます。私としては。

「日付型のないデータベースへの移植」を考えたことが敗因だという、yaemon さんの指摘はごもっともです。
しかし、ほんと、実務というのは普通の考えではありえない制約が入ったりするもので、毎日が新鮮な苦難の連続です。
kazuyoshikakihara
2009/05/09 09:09
前回は「はじめまして」の挨拶もせずに失礼しました。

kakihara さんの芸域のひとつである SQLite が日付型をもたないことは調査していました。しかし触れませんでした。

1. SQLite と、今回の RDB 実装 (MySQL ? )との間でなんどもデータ交換するのが常態ならば、 本文のような文章は書かれないだろう。
2. すると今回の RDB実装から SQLite に移す時には、なんらかの業務ロジックの変更や、データカラムの変更があるだろう。
yaemon
2009/05/12 04:22
3. そのときには、日付フィールドだけでなく、ほかに対応しないといけない部分が発生していて、どちらにしても変換プログラムを書かないといけないだろう。

という憶測に憶測を重ねた結果です。
( 守秘義務のせいで訂正したくてもできない部分があったらすみません )

予期しない制約も、スクリプトで回避できるものならば、社員として腹立たしくとも、プログラマとしては燃えてしまうのではないか、という憶測もあります。

手放してしまったのでさだかではありませんが、「リファクタリング」に、移植・拡張の話もありましたよね?
yaemon (つづき)
2009/05/12 04:22
これはこれはyaemonさん、すばらしい憶測です。
そう、守秘の関係であまり具体的なことは書けないのです。この部分に関しては大正解です。

ちょっとだけネタばらしをすると、SQLite ではないです。開発の進捗によっては、大人の事情で、COBOL をベースにした、レガシーなDBを使う可能性があるということです。

今回は私は主要スタッフではないので、外野で(・∀・)ニヤニヤしているだけの立場です。なので、そのレガシーなDBの具体的な商品名も知りません。

ただ、YYYYMMDD に数値型を使うという発想が私には全く無くて、あまりに新鮮だったので、ブログのネタにしました。

しかし本当に、数値型を擁護してくれる人はいなさそうですね。
kazuyoshikakihara
2009/05/12 23:39
IBM の C.... 実装では datetime があるとか、
native は C....er と言わず c.... programmer と呼ぶようだと 英語 google に教えていただきました。

だいたいこんな感じらしいです。
http://www.smga3000.com/cobol/COBOL47.HTM
yaemon
2009/05/13 00:56

コメントする help

ニックネーム
本 文
激論 YYYYMMDD 民芸的プログラミング 〜ソフトウェア開発日記〜/BIGLOBEウェブリブログ
文字サイズ:       閉じる