PowerCMS X ブログ

2024-06-07

モデル設計の考え方とポイント

基本的な考え方

PowerCMS X を導入する際に行うべきことの1つに、CMSで管理するデータベースの定義となるモデルの作成があります。「記事」や「ページ」「カテゴリ」などのモデルは標準で定義されておりインストール時に作成されますが、その他のコンテンツを扱う際には独自に定義する必要があります。
モデル定義は、CMS管理画面上からRDB(リレーショナルデータベース)のテーブル定義をする。と言い換えることができ、基本的にはテーブル定義の設計と同じ考え方で進めていくことになります。
今回は、PowerCMS X のモデル設計をRDBのテーブル設計の進め方から説明したいと思います。(以降、適宜テーブルをモデルと読み替えてください。)
例として自社で扱っている商品をCMSで管理する際のテーブル定義を検討していきます。

論理設計

テーブル設計をする際、はじめに論理設計を行いますが、まずはCMSで管理するデータ要素(エンティティまたはカラム)を書き出していきます。ここでは便宜的に簡略化し商品情報として以下の要素を扱います。

  • 商品名
  • 商品写真
  • 商品説明
  • カテゴリ
  • サイズ
  • 在庫数

要素を書き出したら、要素のまとまりごとにデータの集合を定義します。データの集合を定義する際には「データの正規化」や「マスタとトランザクション」を考える必要があります。

データの正規化

RDB設計を行う際の正規化とは、一言で言うとデータを集合として管理する上で冗長なデータ集合をなくすことです。
仮に今回扱う要素を全て1つの集合で管理するとデータは以下のようになります。同じデータが重複して管理されているため、例えば商品説明を更新する場合、全てのデータを更新する必要があります。

商品情報テーブル
商品名 商品写真 商品説明 カテゴリ サイズ 在庫数
商品A 写真A 商品説明A カテゴリA S 10
商品A 写真A 商品説明A カテゴリA M 5
商品A 写真A 商品説明A カテゴリA S 15
商品A 写真A 商品説明A カテゴリA M 2

これを正規化するとデータの集合は商品IDをキーに以下の2つに分かれます。

商品情報テーブル
商品ID 商品名 商品写真 商品説明 カテゴリ
1 商品A 写真A 商品説明A カテゴリA
在庫情報テーブル
商品ID サイズ 在庫数
1 S 10
1 M 5
1 S 15
1 M 2

マスタとトランザクション

もう1つ、マスタとトランザクションを区別してデータ分けるという考え方があります。
マスタデータとは、データの特性上あまり変更されることのないデータに対し、トランザクションデータはマスタデータに比べ更新頻度の高いデータとなります。
上記の例では、商品情報はマスタデータ、在庫情報はトランザクションデータとなります。カテゴリも、正規化もしくはマスタとしてテーブルを分けるという考え方もできます。

以上のプロセスを経て、結果2つのデータ集合ができました。これは管理画面でデータを編集する画面の単位とほぼイコールになり、このまとまり(集合)がそれぞれテーブルとなります。ここまでが論理設計になります。

  • 商品情報
  • 在庫情報

物理設計

次に各テーブルに定義された要素について、物理設計をしていきます。物理設計では実際にRDB上にテーブルを作る際に必要な以下の定義をしていきます。

各要素の型を定義する

各要素をテーブル上どのようなデータ形式で管理するか定義します。商品名や商品説明はテキスト型、在庫数は数値型、商品画像についてはPowerCMS X ではバイナリ型としてファイルではなく直接DBで管理します。

モデル編集画面のキャプチャ

インデックスを定義する

テーブル上一意となる要素はキーとなり、プライマリインデックスが自動的に定義されますが、CMSのビュー(テンプレート)からテーブルに登録されているデータを参照する際のキーとなる要素にはインデックスを設定することで、データ参照の際パフォーマンス改善につながります。

以上の設計過程を経て、実際にテーブルの作成を進めていくことになります。

モデル設計固有のポイント

ここまで、モデル設計はRDBのテーブル設計と同じ考え方であることをベースにその進め方を説明してきましたが、PowerCMS X のモデル定義固有のポイントもあります。ここでは代表的な2つをあげます。

管理画面のUI定義が必要

PowerCMS X のモデル定義はデータベースの作成後に管理画面のUI定義をします。
モデルの編集画面では、実際にコンテンツを新規登録する際に利用する編集画面のUIを定義できます。例えばテキスト型の要素には、1行テキストやテキストエリア、選択項目等を設定することが可能です。その他デフォルト値やバリデーションなども設定ができますので、要素に最適なUIを定義することができます。

実際に商品情報と在庫情報のモデルを定義し、作成された管理画面は以下になります。

商品情報編集画面のキャプチャ

在庫情報編集画面のキャプチャ

モデルと要素の数について

PowerCMS X ではモデルに定義された要素に対して、ビュー(テンプレート)から対象要素を操作するためのテンプレートタグが自動で定義されます。このテンプレートタグはユーザーが管理画面にアクセスするとPHPの実行コードにコンパイル後にキャッシュされます。一度キャッシュされればコンパイルはスキップされますが、要素の総数が多いとこの初期化処理がパフォーマンスのボトルネックになるケースがあります。コンテンツに必要のない要素もCMSで管理すると、必要のないテンプレートタグが初期化処理で生成されることにもなりますので、CMSで管理するデータを必要最小限にし、モデルと各モデルを構成する要素の総数を抑えることがポイントとなります。

最後に

以上、モデル設計をする際の考え方やポイントについて、最も基本的な部分に絞って記載しました。
モデルの設計は自由度が高いため、業務要件に合わせたデータ管理が可能ですが、作成したモデルがPowerCMS Xの内部でどのように利用されるか、その特性を理解することも大事になります。

カテゴリー:技術情報

投稿者:miura

ブログ内検索

アーカイブ