目次

ニュース

日記カテゴリ

書庫

R・田中一郎さんの記事に触発されて書いてみた(笑

データベースの設計@R.TanakaIchro's Blog
http://blogs.wankuma.com/rti/archive/2006/12/14/50719.aspx

で(4)の部分で型について触れられているので僕の意見を

店番って言うと数値型選びそうなのですが、
業務中でゼロパディングして使用しているなら文字列型にしましょう。

「いや、数値型で格納して出力時にゼロパディングすればいいじゃん。」とか思われるかもしれないですけど、
それってデータの改ざん※1なんですよね。

別に"00001"も1をゼロパディングして"00001"にしても見た目は同じなんでいいっちゃいいんですが、
仮にプログラム中に数値を整形するって処理が入るとテスト工数増えますからね。

まぁなんでこんなこと書いたかと言うと今の現場で困ってるんですよね、
上記のようなことになっていて。それだけならまだいいのですが別のテーブルはCharだったりするんで※2 orz
あとプライマリーで日付を使う場合は文字列型推奨※3で、分単位で一意にしたい場合は日付型ですかね。

ほんと言うと型付けに関するルールはプロジェクトの初期段階で固めて欲しいなぁとか思ったり。
#そこまで気づくPMなんてそうそういないか^^;

※1 白状すると実は現場のPMからの受け売り・・・
※2 実はさらに桁数も違うというおまけ付き
※3 文字列型にすると例えば"99999999"は無期限を意味するとか、"00000000"は未定等の使い方ができる

投稿日時 : 2006年12月14日 20:51
Feedback
  • # re: 店番だからってそれが数字だとは限らないわけで・・・
    はつね
    Posted @ 2006/12/14 22:32
    日付は素直に日付形に入れて欲しいですね~。未定はNULL、無期限は(DBが許しているならば)9999/12/31のような感じで。

    あと、数字なのか数値なのかの区別は重要というのは同意。ID代わりのものは数字(つまり文字列型)であり先頭の0すらも意味があるはずです(先頭0は直営で、1がフランチャイズでとか)。

  • # re: 店番だからってそれが数字だとは限らないわけで・・・
    taka
    Posted @ 2006/12/14 22:45
    はつねさんこんばんは。

    日付は日付型でいいっすよ、
    でもプライマリーに含まれるときは文字列型がいいなぁと
    例えば業務的に時刻を不要とする項目があり、でも日付型。
    こんなのがあったとしてオペミスとかで時刻まで入れてしまった場合に、
    偶然にも同じ日付で違う時刻のレコードが出来てしまった。
    しかしアプリケーション側は日付しか見ない。
    同じ日付のレコードがSQLによって2件返ってしまいエラー。
    こんな現象があったり。
    ん?でもこの場合プライマリでなくても同じか^^;
    #日付型でチェック制約入れるのも手ですかね。

    数字か数値の違いは重要ですよね。
    >先頭0は直営で、1がフランチャイズでとか
    まさしくそんな状況があったり^^;
  • # re: 店番だからってそれが数字だとは限らないわけで・・・
    はつね
    Posted @ 2006/12/15 0:32
    列定義の型で許される範囲を更に狭くしたとき(例えば、NUMBER(4)だけれども0~3999までとか)は、チェック制約を入れるのも手ですね。
    あとは、日付型で時刻だけを除去したいときは、BEFORE TRIGGERがあるDBだったらトリガーで時刻部分を切り捨ててしまうのも手ですね。
  • # re: 店番だからってそれが数字だとは限らないわけで・・・
    taka
    Posted @ 2006/12/15 0:44
    なるほどー、トリガーって手もありますね。
    勉強になります。
  • # re: 店番だからってそれが数字だとは限らないわけで・・・
    R・田中一郎
    Posted @ 2006/12/15 17:47
    >業務中でゼロパディングして使用しているなら文字列型にしましょう。

    これは、文字列型にしないと、

    000001
    00001

    を別視できないですもんね。
  • # re: 店番だからってそれが数字だとは限らないわけで・・・
    taka
    Posted @ 2006/12/18 20:29
    >R・田中一郎さん
    そうですね、それも理由なのですが文字列型にしないとバグを生むこともあるのです。
    それについて記事を書こうかと思ったのですがまとまらない orz
  • # 何故コードで表すべき数字文字列を数値型にしてはいけないのか?
    webloging
    Posted @ 2006/12/18 22:08
    何故コードで表すべき数字文字列を数値型にしてはいけないのか?
タイトル
名前
Url
コメント 

Blog 利用状況