このようにきめ細やかなデータ型が用意されているのに対し、データベース設計者はどのデータ型を採択するかを決めなければなりません。例えば、Northwindの社員コードは数値型を使っていますが、一般にはコード類を文字型に統一する方が多いと思います。
その場合でも社員コードなど桁数が決まっているものはchar(8)というように固定長文字列タイプを使い、社員名などのように桁数がデータにより異なるカラムはvarchar(20)というように可変長文字列タイプを使うのが普通でしょう。
Northwind |
梅田の使い方 |
列名 |
データ型 |
SQL Server |
Oracle |
方針 |
使用停止 |
Bit |
Decimal(1,0) |
Number(1,0) |
Bitは索引を張れないので使わない |
運賃 |
Money |
Decimal(8,0) |
Number(8,0) |
数値型はDecimalに統一 |
数量 |
Smallint |
Decimal(4,0) |
Number(4,0) |
数値型はDecimalに統一 |
値引 |
Real |
Decimal(5,2) |
Number(5,2) |
数値型はDecimalに統一 |
社員番号 |
Int |
Nvarchar(8) |
Nvarchar2(8) |
ID関連は文字型を使う |
地域明細 |
Nchar(50) |
Nvarchar(50) |
Nvarchar2(50) |
文字型はNvarcharに統一 |
備考 |
Ntext |
Ntext |
Nclob |
長い可変長文字列はNclobを使用 |
受注日 |
Datetime |
Datetime |
Date |
日付・時刻はDateを使用 |
写真 |
Image |
Image |
Blob |
音声や画像はBlob使用 |
表2:Northwindのデータ型使い分けと筆者プラン
表2の左欄は、Northwindで採択されているデータ型です。格納されるデータによりbitやmoney、smallint、int、realなど様々なデータ型が使われています。ただしこのデータベースは「見本」なので、意図的に様々なデータ型を使っているのかも知れません。
実際のデータベース設計では、使用するデータ型をもっと統一した方がよいと思います。表2の右欄に著者だったらどれにするかを、SQL ServerとOracleの両ケースで記載しています。著者はできるだけデータ型を統一した方が開発・メンテナンスが楽ちんという考えで、データの種類によりデータ型を表3のように統一しています。
金額や数値
|
真数(Decimal/Number)
|
文字列
|
可変長文字列(Nvarchar/Nvarchar2)
|
ID、番号、コード
|
可変長文字列(Nvarchar/Nvarchar2)
|
フラグ
|
真数(Decimal/Number)
|
区分、タイプ、パターン |
可変長文字列(Nvarchar/Nvarchar2) |
表3:データの種類によるデータ型の統一
例えば金額や数値などは、格納される値に小数点があるかどうか、最大桁数の大きさがいくつかにかかわらず真数(SQL Server:Decimal/Oracle:Number)を使います。また文字列であれば、文字数が決まっているかどうかにかかわらず可変長文字列(SQL Server:Nvarchar /Oracle:Nvarchar2)一本で勝負です。
カラム名とデータ型との関係も固定化し、コードや区分という名称が付けば必ず文字型、フラグという名称が付けば必ず数値型というように、そのアプリケーション内ではカラム名とデータ型との関係は統一します。
このようなルールを定めておけば、あるときはdecimal、あるときはintというように神経を使う必要がありません。ディスクやメモリ容量が飛躍的に大きくなった現代において、わずかなデータサイズを惜しんでばらばらにするよりは、統一によりミスを少なくする方が勝ると考えています。
|