2

固定の8桁の数値を格納するために、データベースでどのデータ型を使用する必要があるかを理解しようとしています。

char(8)他の文字を受け入れてアプリケーション側で検証する場合でも使用する必要がありますか、それともnumber(x)そのようなものがありますか?

電話番号の列にも同じジレンマがあります。私は使用する必要がありますchar(x)か、それとも何かがより適切でしょうか?

編集-あなたの質問への回答:

  1. 最初の固定8桁の列は、主キーとして使用される可能性があります。それは私の国の社会保障番号を表しています。この列では計算は行われません。すべての数字を保持する必要があります(先行ゼロの可能性もあります)。ただし、おそらくソートされます(主キーになるため)
  2. 電話番号については、次のような文字列として保存する予定でした:12345678901。質問は、「これchar[]が文字や他の文字を受け入れないことをどのように確認できますか。この検証をクライアント側で行う必要がありますか? 」に関するものでした。
4

4 に答える 4

8

場合によります。

数字ですか?あなたはその数に対して数学的な操作をしますか?数値で並べ替えていただけますか?はいの場合は、数値として保存します。また、数値が常に8桁になるように制約を作成する必要があります。

number_field number(8) check (number_field between 11111111 and 99999999)

コード(クレジットカード番号、社会保障番号、アカウント番号など)に似ている場合は、char(8)を使用し、数字のみが含まれるようにするためのチェック制約を使用すると思います(正規表現は非常に優れています)これに使用)。varcharではなくcharデータ型を使用することにより、フィールドに8文字が含まれていることを確認する必要はなく、文字がすべて数字である必要があります。

code_field char(8) check (regexp_like(code_field, '[:digit:]{8}'))

事実上、必要なのはドメインですが、Oracleにはドメインがありません。

クライアント側とサーバー側のどちらを検証するかについては、私の世界では、データベースに格納されているデータを可能な限りクリーンにするために、常にデータベースの制約に依存しています。私のアプリでは、制約違反をテストして、ユーザーに適切なエラーを返します。もちろん、クライアント側でも検証を行うことができますが、なぜ繰り返すのでしょうか。唯一のケースは、サーバーへのラウンドトリップを回避したい場合です。

于 2012-10-16T18:34:27.317 に答える
0

数値を数学演算に使用する場合は、数値を格納するために常に数値データ型を使用する必要があります。したがってNUMBER、NUMBER(8)を使用して長さを指定できることを確認してください。ただし、これより長い数値は使用しないでください。

Oracleデータ型の詳細。

電話番号については、常に。として保存することをお勧めしCHAR(11)ます。保存する前に不要な文字を削除すると同時に、データの均一性を確保することをお勧めします。

したがって、「1(888)673-1234」は、テーブルに「18886731234」として格納されます。

于 2012-10-16T18:23:54.533 に答える
0

数値操作を行っていない場合、または主キーとして使用している場合はchar(8)を使用し、number(8)を使用できる場合:number(8)データ型を使用して1234を格納する場合は、4桁のみを格納します。 8桁で表示します。

于 2012-10-16T18:29:38.800 に答える
-1

intなどの数値型を使用します。

于 2012-10-16T18:22:33.710 に答える