PR

日本語名の是非とデータ型採用方針

2006年3月22日(水)
梅田 弘之(うめだ ひろゆき)

使用するデータ型を統一する


   このようにきめ細やかなデータ型が用意されているのに対し、データベース設計者はどのデータ型を採択するかを決めなければなりません。例えば、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というように神経を使う必要がありません。ディスクやメモリ容量が飛躍的に大きくなった現代において、わずかなデータサイズを惜しんでばらばらにするよりは、統一によりミスを少なくする方が勝ると考えています。


最後に


   今回は、データベース設計に取り掛かる際に最初にぶつかる問題である、「日本語を使うか?」「データ型を使い分けるか?」という2点をテーマにしました。このあたりは、人によって様々な考え方があるところです。こんなふうに考えている人もいるんだなと思っていただければ結構だと思います。

著者
梅田 弘之(うめだ ひろゆき)
株式会社システムインテグレータ

東芝、SCSKを経て1995年に株式会社システムインテグレータを設立し、現在、代表取締役社長。2006年東証マザーズ、2014年東証第一部上場。

前職で日本最初のERP「ProActive」を作った後に独立し、日本初のECパッケージ「SI Web Shopping」や開発支援ツール「SI Object Browser」を開発・リリース。日本初のWebベースのERP「GRANDIT」をコンソーシアム方式で開発し、統合型プロジェクト管理システム「SI Object Browser PM」、アプリケーション設計のCADツール「SI Object Browser Designer」など、独創的なアイデアの製品を次々とリリース。最近は、AIを利用したサービスに取り組んでいる。

主な著書に「Oracle8入門」シリーズや「SQL Server7.0徹底入門」、「実践SQL」などのRDBMS系、「グラス片手にデータベース設計入門」シリーズや「パッケージから学ぶ4大分野の業務知識」などの業務知識系、「実践!プロジェクト管理入門」シリーズ、「統合型プロジェクト管理のススメ」などのプロジェクト管理系、最近ではThink ITの連載をまとめた「これからのSIerの話をしよう」を刊行。

「日本のITの近代化」と「日本のITを世界に」の2つのテーマをライフワークに掲げている。

連載バックナンバー

Think IT会員サービス無料登録受付中

Think ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。会員登録を済ませてThink ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

他にもこの記事が読まれています