Magento: カテゴリデータはどこに保存されている?

Nishi
2026-02-17
2026-02-17

こんにちは!
Nishiです。前回はMagentoのカテゴリの作成方法の記事を書きました。

今回は、「Magentoのカテゴリデータが、実際にはどこに・どのように保存されているのか」
について書いていきたいと思います。

カテゴリデータを管理する主要テーブル

Magentoのカテゴリは、1つのテーブルだけで管理されているわけではありません。
主に、以下のテーブルが関係しています。

  • catalog_category_entity
  • catalog_category_entity_*
    (datetime, decimal, int, text, varchar 等
        ※属性のデータ型ごとにテーブルが分かれています。)
  • eav_attribute

一見するとテーブルが分かれていて分かりづらそうですが、
これは EAV(Entity-Attribute-Value)構造 を採用しているためです。

まずは、それぞれの役割を簡単に見ていきたいと思います。

catalog_category_entity テーブルに保存されているもの

catalog_category_entity テーブルは、カテゴリの「骨組み」 を管理するテーブルです。
ここには、次のような情報が保存されています。

  • entity_id:カテゴリID
  • attribute_set_id:属性セットのID
  • parent_id:親カテゴリID
  • path:カテゴリツリー上の位置
  • level:階層の深さ
  • position:同階層内での並び順
  • children_count:子カテゴリの数
  • created_at, updated_at:作成日時、更新日時

つまりこのテーブルは、
カテゴリがどこに属し、どんな構造を持っているかを管理しています。

管理画面で設定したカテゴリ情報はどこに保存されるのか

catalog_category_entity テーブルには、
管理画面で設定した カテゴリ名(name)や有効/無効(is_active)といった項目は、
保存されていません。

ここで重要になるのが EAV構造 です。
Magentoでは、カテゴリや商品などのエンティティを柔軟に拡張できるよう、
次の3つを分離して管理しています。
・エンティティ(Entity)
・属性(Attribute)
・値(Value)

そのため、カテゴリ名、表示設定、メタ情報 といった属性ごとの値は、
catalog_category_entity テーブルではなく、属性ごと・データ型ごとに分かれたテーブルに保存されます。

文章だけだと少し分かりにくいため、
カテゴリ周りのテーブル構造を図で整理してみます。
画像
※ 矢印は「外部キーを持つテーブル → 参照先」を表しています。

[補足]
今回の記事では、catalog_category_entity_* テーブルと catalog_category_entity テーブルを紐付けるカラムとして entity_id を使用します。
これは、Magento Open Source にはステージング機能がないためです。
一方、Adobe Commerce ではステージング機能に対応しているため、紐付けには row_id が使用されます。

EAV構造でカテゴリ名が保存される仕組み

例えば、カテゴリ名(name)は文字列属性のため、catalog_category_entity_varcharテーブルに保存されます。

このテーブルは、「どのカテゴリの、どの属性の、どのスコープの値か」を管理するために、
次のようなカラムを持っています。

  • value_id:レコードのID
  • entity_id:対象カテゴリのID(catalog_category_entity.entity_id を参照)
  • attribute_id:対象属性のID(eav_attribute.attribute_id を参照)
  • store_id:対象ストアビューのID(store.store_id を参照)
  • value:実際の値

このように、  
entity_id・attribute_id・store_id の組み合わせによって、1つの属性値が特定されます。

attribute_id とは

attribute_id は、「この行がどの属性の値なのか」を表すIDです。

たとえば、
・name
・is_active
・description
といった属性は、すべて eav_attribute テーブルで管理されています。

catalog_category_entity_varchar の attribute_id は、
この eav_attribute.attribute_id と参照することで、
「この value は カテゴリ名 である」と判別できるようになっています。

store_id とスコープの関係

store_id は、どのスコープの値かを表しています。
(スコープの詳細については、以前の記事「Magentoのスコープとは?」で解説しています)

・store_id = 0
 → グローバル(デフォルト)値
・store_id ≠ 0
 → ストアビューごとの値

管理画面で「Use Default Value」にチェックを入れている場合、対象ストアビュー用のレコードは作成されず、store_id = 0 の値が参照されます。
また、チェックを外して値を入力すると、対象ストアビューの store_id で新しいレコードが保存されます。

最後に

Magentoでは、カテゴリの「構造」と「値」を別々のテーブルで管理しています。

catalog_category_entity は構造を、
カテゴリ名や設定値は属性ごとのテーブルを見る、という点を覚えておくと
DBを直接確認する際に迷いにくくなります。