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

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


   このようにきめ細やかなデータ型が用意されているのに対し、データベース設計者はどのデータ型を採択するかを決めなければなりません。例えば、Northwindの社員コードは数値型を使っていますが、一般にはコード類を文字型に統一する方が多いと思います。

   その場合でも社員コードなど桁数が決まっているものはchar(8)というように固定長文字列タイプを使い、社員名などのように桁数がデータにより異なるカラムはvarchar(20)というように可変長文字列タイプを使うのが普通でしょう。

Northwind梅田の使い方
列名データ型SQL ServerOracle方針
使用停止BitDecimal(1,0)Number(1,0)Bitは索引を張れないので使わない
運賃MoneyDecimal(8,0)Number(8,0)数値型はDecimalに統一
数量SmallintDecimal(4,0)Number(4,0)数値型はDecimalに統一
値引RealDecimal(5,2)Number(5,2)数値型はDecimalに統一
社員番号IntNvarchar(8)Nvarchar2(8)ID関連は文字型を使う
地域明細Nchar(50)Nvarchar(50)Nvarchar2(50)文字型はNvarcharに統一
備考NtextNtextNclob長い可変長文字列はNclobを使用
受注日DatetimeDatetimeDate日付・時刻はDateを使用
写真ImageImageBlob音声や画像は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点をテーマにしました。このあたりは、人によって様々な考え方があるところです。こんなふうに考えている人もいるんだなと思っていただければ結構だと思います。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30