[pgsql-jp: 26052] Re: データ形式についての質問です
Naofumi Kondoh
nkon @ shonan.ne.jp
2002年 5月 21日 (火) 07:38:15 JST
ソフト工房の近藤です。
KiyohitoTanaka wrote:
>
> 田中@MCと申します。
>
> テーブルを作る際のデータ形式ですが、テキストの場合、
> 解説書によってchar形式を使って説明しているのものと
> varchar形式を使って説明しているものがあります。
>
> 実際に構築を経験された方々の意見としてはどちらが
> 適当なのでしょうか?
> もし、助言がございましたらよろしくお願いします。
(1) コードなど他の表との JOIN KEY (結合キー) となる
(可能性のある)項目は、CHAR にして固定長とする。
(2) それ以外の項目は、 TEXT 型。
例えば、昔から屋上屋をかさねて、桁数のそろわない文字
コードがあったりしても、CHAR 型なら、短いコードを
INSERT/UPDATE した場合は、必ず後に空白が補われます。
間違って、DB 定義の固定長より長い文字を入れようと
すると、長過ぎる分がカットされるか、エラーになります。
桁数の決まっている文字型のコードには便利です。
VARCHAR の場合、DB により、後ろの空白は、カットされ
たり、指定したとおりの空白が入ったりと動作が異なる
ようです。 ≫ 詳しい方よろしく。
(注)新しい Version の PostgreSQL では、CHAR/VARCHA
は、バイト数でなく文字数です。注意しましょう。
また長過ぎる文字を入れようとするとエラーになり
ます。以前のversionのように、長過ぎる分を自動
的にカットしてくれません。
昔の DB で、正数で 10 桁以上が使えなかった場合は、
JANコードなどでも CHAR(13) (記憶違いならごめんなさい)
などと、文字型にしましたが、PostgreSQL なら、1,000
桁( 千桁 )の十進数まで使えるので、長い数字コードでも
CHAR 型にはしません。
ブロックコード(数桁ずつ桁別に意味ありのコード)のばあい、
CHAR 型にして substr で、分解すると便利な場合がある
かもしれませんが、検索の最適化処理などを考えると、
int か numeric にして、アプリケーションで、桁別に
分解した方がいいと考えます。
>
> 例としては社員マスタテーブルで、項目は
>
id(5桁数字) int4 ##10桁以上なら numeric(N)
氏名 text
住所 text
目的によりますが、住所ラベル印字の改行に便利なように
住所1,住所2,住所3 などと複数項目にしたり、改行の手がかり
になるように整形したりします(勿論アプリで)。
会社名、所属名や、マンション など長い文字の場合、
変な位置で改行されて印字された住所ラベルなどは、
みっともないので。
郵便番号 CHAR(7) または CHAR(8)
ふりがな text
所属 text
生年月日 date
更新日 timestamp
>
> という設定でお話いただければ幸いです。
===========================================================
5/29 - 5/31 東京ビックサイト Linux World Expo/Tokyo 2002
.org Pavilion に、JPUG 出展。
http://www.postgresql.jp/misc/event/LW2002/index.html
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
(株)ソフト工房 近藤直文 Email: nkon @ shonan.ne.jp
http://www.SOFTKOUBOU.co.jp/ http://www.shonan.ne.jp/~nkon/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
pgsql-jp メーリングリストの案内