2026.03.16 マスタ設計 小売

商品マスタ設計を誤ると、運用・保守が重くなると思っている

小売業の業務システムで、最も頻繁に参照されるマスタが「商品マスタ」だ。初期設計のミスは、後々の運用・保守に深刻な影響を与える。特によくある設計ミスが「バーコードを主キーにすること」だ。

なぜそれが問題なのか、どう設計すべきかを整理したい。

バーコードを主キーにしてはいけない

小売業の現場では、商品の識別にバーコード(JAN/UPCコード、インストアコード)を使うことが多い。そのためシステム設計の初期段階で「バーコードを商品マスタの主キーにしよう」という発想になりやすい。

しかしこれは誤りだ。バーコードは「商品そのもの」ではなく、「運用上のラベル」に過ぎないからだ。

バーコードが変わる現場の実態

同一商品でも、バーコードが変わることは珍しくない。

  • パッケージリニューアルに伴うJANコード変更
  • 規格・内容量変更による新コード発行
  • インストアコードの店舗間統一・再割当
  • セルフレジ導入で独自コードが増加
  • バーコードの印刷ミスによる再発行

バーコードが変わるたびに、主キーが変わることになる。これは外部キーを持つすべての関連テーブルに連鎖的な影響を与え、データの整合性が崩れるリスクを生む。

商品ID と コード を分離する設計

解決策はシンプルだ。「商品そのもの」を示す不変のIDと、「コード(バーコード等)」を別テーブルで管理する設計にすることだ。

テーブル 役割 変更頻度
商品マスタ 商品の実体(ID・名称・カテゴリ等) 低い(商品廃番以外は安定)
商品コードマスタ 商品に紐づくコード一覧(JAN・インストア等) 高い(追加・変更が頻繁)

このように分離すると、コードが変わっても商品マスタ側は変更不要になる。関連テーブルは商品IDで紐づけるため、コード変更の影響が商品コードマスタだけに留まる。

設計イメージ

商品マスタ(products):product_id(PK)/ 商品名 / カテゴリ / 単位
商品コードマスタ(product_codes):code_id(PK)/ product_id(FK)/ コード種別 / コード値 / 有効期間

1つの商品に対して複数のコードを持てるため、JANコードとインストアコードの両方を管理したり、コード変更の履歴を残したりすることも可能になる。

セルフレジ時代のコード増殖問題

近年、セルフレジの普及でこの問題がより深刻になっている。セルフレジ対応では、独自のインストアコードを新たに発行するケースが多い。

バーコードを主キーにした設計では、コードが増えるたびに商品マスタのレコードが増殖する。同じ商品なのに、JANコード版・インストアコード版・セルフレジ版と、複数のマスタレコードが存在するという状態になりやすい。

こうなると、「この商品の正しい在庫数はどれか」「どのレコードが最新の情報か」という整合性問題が常に発生するようになる。

集計・保守が重くなる理由

バーコード主キー設計の商品マスタで運用を続けると、以下のような保守負荷が積み上がっていく。

  • コード変更のたびに、紐づく販売履歴・在庫データの整合確認が必要になる
  • 「商品Aの年間売上」を集計するとき、複数コードのデータを合算する処理が必要になる
  • 廃番商品のコードが別の商品に再利用されると、過去データとの混乱が起きる
  • マスタのメンテナンス工数が増え続け、担当者の暗黙知に依存するようになる

設計時に問うべきこと

商品マスタを設計するとき、私は必ず「この商品の"同一性"をどこで判断するか」を問うようにしている。

パッケージが変わっても同じ商品か?内容量が変わったら別商品か?仕入先が変わっても同じ商品として扱うか?これらの業務上の判断が、テーブル設計の前提になる。

バーコードは「識別のための手段」であり、「商品の同一性の定義」ではない。この違いを意識することが、長く使えるマスタ設計への第一歩だと思っている。

まとめ

  • バーコードは「商品そのもの」ではなく「運用上のラベル」——主キーにしてはいけない
  • 商品マスタ(不変ID)と商品コードマスタ(可変コード群)を分離する設計が基本
  • セルフレジ普及でコード増殖が起きやすくなっており、設計の影響がより大きくなっている
  • コード変更が商品マスタ全体に波及しない構造にすることで、保守コストを抑えられる
  • 「この商品の同一性をどこで判断するか」を設計前に業務側と合意しておくことが重要

Related Service

小売現場の商品管理・棚卸・在庫確認をモバイルで完結する「クラシス」。バーコードスキャンと正しいマスタ設計の組み合わせで、現場の混乱を防ぎます。