[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 メーリングリストの案内