keyword 4 データ型
列は表の垂直方向の領域を指しますが、ここには同じ種類のデータが入っている必要があります。例えば、社員番号の列は数値と決めたら数値データでなければなりません。その種類であるデータのタイプを定義したものを「データ型」と言います。
データ型はデータベースの種類によって表1に示すとおり異なります。Oracleの場合、固定長の文字データを示すCHAR型、可変長の文字データを示すVARCHAR2型、日付データを示すDATE型やTIMESTAMP型、数値データを示すNUMBER型などがあります。
| データのタイプ | Oracle | SQL Server | DB2 |
|---|---|---|---|
| 数値(整数) | [td:rs=2]NUMBER | BIGINT INT SMALLINT TINYINT BIT DECIMAL NUMERIC |
SMALLINT INT BIGINT DECIMAL |
| 数値(浮動小数点) | FLOAT REAL |
FLOAT REAL DOUBLE |
|
| 数値(通貨) | なし | MONEY SMALLMONEY |
なし |
| 文字 | CHAR VARCHAR2 LONG |
CHAR VARCHAR |
CHAR VARCHAR LONG VARCHAR |
| 日付 | DATE TIMESTAMP |
DATATIME SMALLDATETIME |
DATE TIME TIMESTAMP |
| バイナリ | RAW LONG RAW |
BINARY VARBINARY |
CHAR(FOR BIT DATA) VARCHAR(FOR BIT DATA) |
| LOB | BLOB CLOB NCLOB BFILE |
なし | BLOB CLOB |
固定長と可変長の違いは次のとおりです。仮にサイズが10文字と決められていて、その列にデータが入力されたのが4文字しかなかったとき、10文字の領域が確保されるのが固定長で、4文字の領域のみが確保されるのが可変長となります。また可変長の場合は詰めて入れていきます。Oracleの場合、固定長のとき、桁数が余るとスペース文字で補われます。なお、逆にサイズがオーバーしてしまった場合、Oracleではオーバーフローエラーとなります。
可変長の場合、値の修正によりフィールドのサイズが大きくなってしまうケースもあります。例えば、可変長文字列の列(サイズ8桁)のとある行のフィールドに4文字の値を最初に入力しました。そうすると4文字分の領域が確保されます。その後、4文字の値を8文字に修正したとします。そうするとフィールドには8文字分の領域が確保されます。それにより、行のサイズも比例して大きくなります。
ただし行が詰まっている状態でこのようなことが起こると、OSレベルでも聞いたことがあると思いますが、「断片化」という状態が起こるケースが増えてきます。断片化が発生すると格納の効率が低下し、より大きな表のサイズが必要となります。また検索の効率も低下します。断片化は、再編成という処理により改善できます(図8)。

データ型は、データ入力時のチェックも行なっています。例えば数値のデータ型に文字データが入力された際にエラーチェックをしたり、Oracleの場合は可能であれば数値のデータ型に変換しています(図9)。

