Oracleでテーブルを作成しようと思います。

以下の項目について、それぞれどんなメリットデメリットがあるでしょうか。
皆さんの開発現場ではどうしていますか。

テーブル名:アルファベットか、日本語か
日時:日時型、文字型、数値

以前の会社では、テーブル名は「アルファベット」、日時はもっぱらCHAR型でした。
とある開発会社のアプリは、テーブル名は「日本語」、日時はもっぱらNUMBER型でした。

日時は、どういう意図で日時型を選択しないのか、いまいちわかりません。
宜しくお願いします。

回答の条件
  • 1人3回まで
  • 13歳以上
  • 登録:2010/09/15 14:58:01
  • 終了:2010/09/22 15:00:03

回答(3件)

id:nobuchiru No.1

ながの回答回数55ベストアンサー獲得回数32010/09/15 15:50:48

ポイント27pt

論理設計の権限が私にあるならば、以下にします。


テーブル名、カラム名はアルファベットを選択します。

日本語のテーブル名、カラム名を使うと、SQLを書くときに英数/かなの切り替えが面倒だからです。

一方、日本語にするメリットは、SQL予約語と、テーブル名カラム名の区別が、見た目で付きやすいですね。


日時は、日時型(date, datetime, timestamp等)を選択します。

日付であればchar(8)でもよろしいかと。データの見た目でわかりやすいからです。(select文をどう書くか、にもよりますが)

日時型であれば、SQLでの計算がしやすいですね。char型だと、アプリ側で計算してからSQLに渡す羽目になります。

id:kyoko55

ありがとうございます。

参考にさせていただきます。

2010/09/21 17:54:46
id:Ktwo No.2

Ktwo回答回数21ベストアンサー獲得回数52010/09/15 21:18:59

ポイント27pt

(日時型を使用するデメリット)

「日時型は(CHAR型やNUMBER型に比べて)取り扱いが難しい」気が致します。

慣れれば、大きな問題とは思いませんが、TO_CHARや、TO_DATE関数などを

使用する手間(?)が面倒だと感じることがあります。

(日時型を使用するメリット)

その項目に編集されている値が、日付として認められる値であることが、

はっきりしていることだと思われます。

あと、日付の計算(月末日+1日=翌月の一日)が可能なところかと

思います。

「暗黙的な変換」

http://www.shift-the-oracle.com/inside/implicit-conversion.html

「日付データ/文字列データの変換」

http://oracle.se-free.com/dml/07_todate.html

id:kyoko55

ありがとうございます。

参考にさせていただきます。

2010/09/21 17:54:49
id:khazad-Lefty No.3

khazad-Lefty回答回数181ベストアンサー獲得回数272010/09/18 19:27:28

ポイント26pt

私の場合、好きにできるのであれば、

カラム名:日本語

意味が分かりやすいこと、プログラム上で列名が分かりやすいなどの視認性がメインです。

あと、英語にすると、英訳のズレ、ローマ字表記のブレなどの規約をかなり厳密にしないと、

表示ブレが日本語名以上に起こりやすいということですね。

デメリットは、漢字変換違いや送り仮名による表記ブレ(ただし個人的にはアルファベット使用時のときよりも小さいと考えてます)、あとIME切り替えの手間、言語系によっては日本語をうまく扱えないのがあるなどでしょうか?


日付:日付型

なによりそのために作られた型なので、それを使うのが自然だというのが一番の理由。

具体的なメリットは日数計算など、必要な関数がSQL側に揃っていること。

例えば何年何月何日は何曜日?というのも日付型ならすぐに出てくること。

デメリットは、まず、処理系によって使える日付範囲が異なること。

「内部的にどの日付を基準とするか」が処理系によって違う場合があるため、扱える日付の範囲が違ってくる可能性がある。

それと、日付でない値が使えないこと。

これ自体は日付型の最大のメリットでもあるのですが、例えば、文字型で「有効期限が終了していない場合」には、9999-99-99などの日付が使うことで単純にBetweenなどで有効なデータを引き出すことができますが、日付型だと同様のことを行うには"3000-12-31"などの実在する日付を使うか、Null(単純にBetweenなどでは指定できなくなる)をしようするしかなくなる。ちなみに私はそういう場合Nullを使用しています。

また、日付未定の場合はNullを使用せざるを得ないわけで、Nullを嫌がる人は日付型を使用しないかと思います。

http://www.geocities.jp/mickindex/database/db_getout_null.html

id:kyoko55

ありがとうございます。

参考にさせていただきます。

文字型の環境で、「9999-99-99」を使用している例を見たことがありました。

確かに、日付型ではできないですね。

皆さん、ありがとうございました。

2010/09/22 12:10:42

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません