プロが教える店舗&オフィスのセキュリティ対策術

DBのテーブル設計で主キーを日付にしたい場合、
日付型を使用せずに数値or文字列で設定する場合がほとんどなのですが、
その理由が「なんとなく安定性がありそうだから」
というくらいでしかありません。

もしかしたら過去に「~~という理由だから」と教えられているかもしれませんが、
それもいまいち思い出せず・・・^^;


今すぐどうこうしたいという内容ではなく、
ちょっとした疑問ですが、
もしご存じでしたらご教授お願いします。

A 回答 (2件)

個人的には date 型でも特に問題ないのではないか、と思っていま


すが、どうでしょうか。
(そもそも主キーに日付、というのパターンをあまりみたことが
 ないのでよくわかりません)
時刻まで含めたいのか、時刻は不要なのかによっても変わってき
ますが、ここは時刻はいらいない、として考えてみます。

また、使用するRDBMSによっても変わってくるはずです。
たとえばOracleの場合を比較してみると、
http://biz.rivus.jp/data_type_inside.html
(1)サイズ
  DATE型・・・7バイト
  NUMBER型・・6バイト
  CHAR型・・・8バイト
  NUMBER型がいいですが、どんぐりの背比べです。
(2)検索スピード
  =を指定したときの検索スピードは、当然インデックスが使
  われますから、どれにしても問題ないぐらい高速で、どれで
  もいいでしょう。それ以外の検索は要件に応じて、どれが早い、
  とはいちがいにはいえないと思います。可変長項目をプライマリ
  キーにすると検索が遅い、というのはきいたことがありますが、
  この場合は全部固定長ですね。


結論としては、検索の用途に応じて、実際にやりたい検索でスピード
をためしてみて決める、というところでしょうか。
RDBMSによって内部形式もちがいますし、一般的にどう、とは
いえないと思います。やりたい検索が決められなければ、DATE
関連に特化した関数がいろいろ使える(このへんもRDBMSに
よってちがいますが)、DATE型が無難かと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

私なりに調べた結果、#1の方のお礼に書きましたが「3月32日」という日付に対応するための
流れが残っているようです。

理論的には型による違いはあまりないようですね。
(厳密なパフォーマンスを求めるならばむろん無視できませんが^^;)
ならば、日付の場合は特に指定がなければ日付型を使っていこうと思います。

#主キーに日付 → ログの主キーを日時(日付型)にしたかった様です。(私ではなく他の人からの話でした)

お礼日時:2006/06/12 09:54

date型で持つと日付や時間計算には便利だが問い合わせをする際はlikeを使えると便利であるのでchar型を使う。


char型の方が容量も少なくすむ。
桁数が揃う文字データにはアクセススピードだけを考えればchar型の方が速いのでchar型を使う。
・・とか・・
    • good
    • 0
この回答へのお礼

色々調べてみました。
結果、

1.システムの処理上、「3月32日」なんていう通常ありえない日付を扱いたい場合がある(月末処理など)

2.そうの場合、日付型が使用できないのでchar型で扱うことになる。

3.日付をcharで扱う必要があるので、システム内で統一するために全てをchar型にしている

という場合が(私の周りには)多いようです。
で、そういう案件が続くと

4.1~3の経験から、最初からchar型にする

というパターンもあるようです。

あとは、日付の持ち方(考え方)がDBMSによって微妙に異なるので混乱を防ぐため、というのもあるようですが・・・

私としても(根拠はないですが)charの方がアクセススピードが速いような気がしています^^;

お礼日時:2006/06/12 09:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A