1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[SQL備忘録] 食材の売上管理から学ぶ「正規化」と「結合」の基本

1
Posted at

はじめに

社内のSQL講習会で学んだ「正規化」と「結合」について、自身の理解を整理するためにまとめました。
マスターテーブルトランザクションテーブル の使い分けを意識しながら、スーパーの食材管理を例に解説します。

1. データベースの2つの役割

データを設計する際、テーブルは大きく分けて2つの種類に分類されます。

分類 役割
マスター (Master) 基礎となるデータ。頻繁には変わらない名簿のようなもの。 商品(りんご、キャベツ)、カテゴリなど
トランザクション (Transaction) 日々の活動(出来事)を記録するもの。 今日の売上、入荷記録など

2. 正規化とは?

正規化とは、データを整理して効率よく管理するためのプロセスです。

[Before] 非正規化のテーブル

一つのテーブルに、売上の事実と商品の詳細情報(単価・カテゴリ)が混ざっている状態です。

売上ID 売上日時 商品ID 商品名 単価 カテゴリ 数量
1001 2026-03-15 09:00 P01 りんご 150 果物 2
1002 2026-03-15 09:15 P03 牛乳 250 飲料 1
1003 2026-03-15 10:00 P01 りんご 150 果物 1
1004 2026-03-15 10:30 P02 キャベツ 200 野菜 1

問題点: この状態だと、商品の情報変更時に整合性が崩れる可能性があります。また、商品名やカテゴリを何度も書くのも非効率です。

3. 分割後のテーブル(Master & Transaction)

役割ごとにテーブルを分けることで、メンテナンス性を高めます。

① m_products(商品マスター)

商品の「基本情報」を管理します。

商品ID (PK) 商品名 単価 カテゴリ
P01 りんご 150 果物
P02 キャベツ 200 野菜
P03 牛乳 250 飲料
P04 豚肉 400 精肉
P05 食パン 180 穀類

② t_sales(売上トランザクション)

「いつ、何が、いくつ売れたか」という事実のみを記録します。

売上ID (PK) 売上日時 商品ID (FK) 数量
1001 2026-03-15 09:00 P01 2
1002 2026-03-15 09:15 P03 1
1003 2026-03-15 10:00 P05 1
1004 2026-03-15 10:30 P02 3
1005 2026-03-15 11:00 P04 1

4. 結合 (JOIN)して、データを1つに

正規化によってデータは複数のテーブルに分割されます。
そのため、必要な情報を取得する際には JOIN を使います。
JOIN を使うことで、別々のテーブルに保存された情報を関連付けて取得できます。

実行するSQL

SELECT
    s.売上ID,
    s.売上日時,
    p.商品名,
    p.カテゴリ,
    p.単価,
    s.数量,
    (p.単価 * s.数量) AS 小計
FROM
    t_sales AS s
INNER JOIN
    m_products AS p
ON
    s.商品ID = p.商品ID
ORDER BY
    s.売上ID;

出力結果イメージ

売上ID 売上日時 商品名 カテゴリ 単価 数量 小計
1001 2026-03-15 09:00 りんご 果物 150 2 300
1002 2026-03-15 09:15 牛乳 飲料 250 1 250
1003 2026-03-15 10:00 食パン 穀類 180 1 180
1004 2026-03-15 10:30 キャベツ 野菜 200 3 600
1005 2026-03-15 11:00 豚肉 精肉 400 1 400

まとめ

データベース設計においても KISS (Keep It Simple, Stupid) は重要です。

  • 1つのテーブルに1つのテーマを
  • データは重複させない(1箇所直せば済むようにする)
  • 出力時に必要な分だけ結合する

複雑に考えすぎず、情報を最小単位に整理することが、ミスのないシステム作りの第一歩だと感じました!


この記事が、同じようにSQL初学者の方の参考になれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?