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

くだらない質問で申し訳ありませんが宜しくお願いします。

下記のようなデータを格納するテーブルを構築しています。

・ユーザーID
・名前
・カタカナ
・パスワード
・年齢
・郵便番号
・住所1
・住所2
・住所3
・電話番号
・メールアドレス
・備考
・削除フラグ
・登録者
・登録日
・更新者
・更新日

上記の内容を下記のようなテーブルのフィールドのデータ型を考えました。

・ユーザーIDのデータ型をVARCHAR(4)
・名前のデータ型をVARCHAR(32)
・カタカナのデータ型をVARCHAR(32)
・パスワードのデータ型をVARCHAR(255)
・年齢のデータ型をINTEGER
・郵便番号のデータ型をVARCHAR(8)
・住所1のデータ型をVARCHAR(255)
・住所2のデータ型をVARCHAR(255)
・住所3のデータ型をVARCHAR(255)
・電話番号のデータ型をVARCHAR(18)
・メールアドレスのデータ型をVARCHAR(255)
・備考のデータ型をTEXT
・削除フラグのデータ型をVARCHAR(1)
・登録者のデータ型をVARCHAR(4)
・登録日のデータ型をTIMESTAMP
・更新者のデータ型をVARCHAR(4)
・更新日のデータ型をTIMESTAMP

そうしたら下記のような風にテーブルのフィールドのデータ型にしたら格納する文字列の桁エラーが起こらないからどうといわれました。

・ユーザーIDのデータ型をVARCHAR(4)
・名前のデータ型をTEXT
・カタカナのデータ型をTEXT
・パスワードのデータ型をTEXT
・年齢のデータ型をTEXT
・郵便番号のデータ型をTEXT
・住所1のデータ型をTEXT
・住所2のデータ型をTEXT
・住所3のデータ型をTEXT
・電話番号のデータ型をTEXT
・メールアドレスのデータ型をTEXT
・備考のデータ型をTEXT
・削除フラグのデータ型をVARCHAR(1)
・登録者のデータ型をVARCHAR(4)
・登録日のデータ型をTIMESTAMP
・更新者のデータ型をVARCHAR(4)
・更新日のデータ型をTIMESTAMP

※現在、使用しているデータベースはPostgreSQLですが、Microsoft SQL ServerやOracleやMySQL等の他のデータベースでもいいものなのかもご教授いただけると助かります。

私の知識不足でどちらがいいのかがわからず投稿させてもらいました。
申し訳ありませんが皆さんのお知恵をお貸し下さい。
宜しくお願いします。

A 回答 (3件)

> 文字列を格納するフィールド型は可変長文字列型にした方がいいのか、固定長文字列型にした方がいいのかです。



varchar 型も可変長文字列なので varchar と text を比べても意味はありません。
固定長と可変長を比べるなら char と varchar を比べなければ行けません。

CPUの性能が良くなり、メモリの搭載量が増え、HDDの読込速度が上がった今となっては、char 型の優位性はあまりないと考えていいでしょう。
データの取扱量が多い環境では、char より varchar の方が資源の有効利用という意味ではメリットが多いかもしれません。

text 型はRDBMSによっては検索時の性能や制限に差があるので、必要最小限にするべきだと思います。
よほど大きな文字列が入る予定が無ければ、varchar(2000) といった感じで varchar 型で大きく取った方が使い勝手がいい場合があります。
    • good
    • 2

varcharは「可変長文字列」ですよ。



PostgreSQLでは、こんなのがありました。
http://lets.postgresql.jp/documents/technical/te …
これに従えば、textが有効的なのは「備考」くらいでしょう。
長いと有名なピカソの本名でも200文字までいきません。

MySQLでは、varcharに比べてtextには制限があります
http://dev.mysql.com/doc/refman/5.1/ja/blob.html

MS SQL Serverでは、textは「将来削除される予定」とあります
http://msdn.microsoft.com/ja-jp/library/ms187993 …
    • good
    • 0

Oracleも視野に入れるなら TEXT 型は不適切です。


Oracleには TEXT 型がありませんので、そのままのDDLではテーブルを作成できませんし、PostgreSQLからデータをコンバートしようとした時、長い文字列が入っているとコンバートできない可能性が有ります。
また、検索をかける際も VARCHAR 型なら文字の正規化をDBにやらせてあいまい検索できる等のメリットがあります。(RDBMSによっては TEXT 型でも対応できる場合もありますが全てではありません)

TEXT 型は文字長を気にしなくて済むので便利ですが、使い勝手が悪い場合もありますし、郵便番号のように桁数が決まっているようなものの場合、不正なデータが入ってしまう可能性を残してしまいますので、どうしても必要な場合だけにとどめた方がいいと思います。

この回答への補足

回答ありがとうございます。
説明不足ですみません。簡単に説明をさせていただきます。
文字列を格納するフィールド型は可変長文字列型にした方がいいのか、固定長文字列型にした方がいいのかです。
ネットで調べてみましたがいい回答を見つける事ができませんでした。
※たぶん、私の探し方が下手なんだと思いますが・・・

大変申し訳ありませんが再度、説明していただけませんでしょうか。
宜しくお願いします。

補足日時:2014/04/06 12:41
    • good
    • 0

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

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