マスタとトランザクションの違いと正規化の考え方:新人エンジニア向けやさしい解説
こんにちは。ゆうせいです。
データベース設計に関わると、避けて通れないのが「正規化(せいきか)」。
「マスタは正規化すべき、トランザクションはしなくてもいい」
こんな話を聞いたことがあるかもしれませんね。
今回はこの考え方が本当に正しいのか?、なぜそう言われるのかを、やさしく丁寧に解説していきます!
正規化ってなんだろう?
データをきれいに保つためのルール
正規化とは、データの重複や不整合を防ぐために、表(テーブル)の構造を整えることです。
たとえば、以下のようなテーブルがあったとします:
顧客ID | 顧客名 | 顧客住所 |
---|---|---|
001 | 佐藤太郎 | 東京都渋谷区 |
002 | 鈴木花子 | 大阪市北区 |
001 | 佐藤太郎 | 東京都渋谷区 |
このように、同じ顧客情報が複数行に登場していると、
「住所を変更したいとき、全部書き換えないといけない」=ミスのもとです。
だからこそ、「顧客」という情報は1か所にまとめて管理しよう!というのが正規化の基本的な考え方です。
マスタとトランザクションの違いをおさえよう
それぞれの役割をまず確認!
種類 | 内容 | 例 |
---|---|---|
マスタ(Master) | 変わりにくい基準データ | 商品情報、顧客情報、社員一覧など |
トランザクション(Transaction) | 日々発生する処理や記録 | 売上履歴、注文履歴、ログイン履歴など |
マスタは「同じ情報を何度も使う」前提のデータ。
一方、トランザクションは「そのときの記録を残す」ことが重要です。
本題:「トランザクションは正規化しなくてもよい」は本当か?
結論:厳密には “必要性が低いことがある” というだけ
マスタの正規化はほぼ必須です。
一方、トランザクションは正規化をしすぎると逆に困ることがあります。
なぜトランザクションの正規化は控えめなのか?
理由を見ていきましょう。
理由①:履歴は「当時の情報」が大事
たとえば、売上テーブルに「商品名」を入れるのは正規化違反ですが…
注文ID | 商品ID | 商品名 | 単価
-------|--------|------------|-----
1001 | A001 | りんご | 120
1002 | A001 | りんご | 120
「商品名を別テーブルにしてJOINしよう!」と正規化するのが正しい…と思いきや、
もし商品名が「青森りんご」に変更されたらどうでしょう?
JOINしたとき、過去の注文まで「青森りんご」になってしまいます。
→ 履歴が改ざんされる危険性がある
トランザクションでは、過去の記録をそのまま残すことが大切なので、あえて非正規化(情報を埋め込む)することがあるのです。
理由②:JOINが増えるとパフォーマンスが落ちる
正規化を突き詰めると、テーブルが細かく分かれます。
つまり、処理のたびに何度もテーブルをJOIN(結合)しなければなりません。
とくにトランザクションは大量のレコードが発生するので、
毎回JOINするのは大きな負荷になります。
だからこそ、多少の重複は許容して、読み取り速度を優先することもあるのです。
図で比較してみよう:正規化の有無とその影響
正規化された形(マスタと紐づけ)
売上テーブル
注文ID | 商品ID | 数量
-------|--------|-----
1001 | A001 | 2
商品マスタ
商品ID | 商品名 | 単価
-------|--------|-----
A001 | りんご | 120
→ JOINしないと商品名がわからない
非正規化された形(商品名や単価も持たせる)
注文ID | 商品ID | 商品名 | 単価 | 数量
-------|--------|--------|------|-----
1001 | A001 | りんご | 120 | 2
→ 単体で読めるが、商品名が重複して保存される
まとめ:目的に応じて使い分けよう!
項目 | マスタ | トランザクション |
---|---|---|
正規化 | 強く推奨 | 状況による |
理由 | 一元管理、整合性 | パフォーマンス、履歴保持 |
JOIN | 前提にしてOK | 多用しすぎ注意 |
今後の学習のヒント
この話をもっと深く学ぶために、以下のテーマに進むのがおすすめです。
- 第1〜第3正規形の具体例と仕組み
- 非正規化と正規化のトレードオフ
- データウェアハウスでの正規化と非正規化の考え方
- データベース設計の実践パターン(OLTPとOLAP)
最初は「正規化=正しい」と思いがちですが、実際には“設計目的に応じてバランスをとる”のが本質です。
判断力を磨いて、より良いDB設計を目指しましょう!またね。
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
山崎講師2025年6月27日シェルソートはなぜ速い?新人エンジニアでもわかるように徹底解説!
山崎講師2025年6月27日マージソートはなぜ速い?新人エンジニアにもわかるやさしい解説
山崎講師2025年6月27日Fluent APIとは?新人エンジニアにもわかる使い方とメリットを徹底解説!
山崎講師2025年6月27日クイックソートが速いのはなぜ?アルゴリズム初心者にもわかる徹底解説