オリジナル CMS サンプル

/contents/cms/tables/2021-03-15_22-42-32-p_message.txtの内容

h3:はじめに(おことわり)
noteでCMSの作り方を伝えていく際は有料コンテンツとしてお届けするため、こちらで情報を出しすぎることはあまりいい気分ではない方もいるかもしれません。

ただ、テーブル情報に関しては以下の2つの理由からこちらで紹介させていただきます。
h4:特別難しいことをしていないから
このCMSのテーブルは全部で5つで特別難しいことはしていません。

テーブル間の結合はありますが、初心者でも理解できる範囲と考えています。

各テーブル、項目数も多くはなく5~8に留めています。これは非常にシンプルな作りで無理なく実装できることの裏付けでもあります。

また、テーブルの構成を開示したからと言ってシステム構築の要にはならないからです。

これを公開したことで、作り方そのものを公開したも同然、ということは全くありません。
/h4:
h4:ある程度の情報開示は学習者のリスク軽減に必要だから
もうひとつは学習者のリスク軽減です。

有料コンテンツにお金を払って着手したらとんでもなく難しいものだった・・・となると気分が悪いですよね。

そういうことを減らすために、ある程度の情報を開示しています。このサイト自体の存在意義もそこにあります。

このサイトは丸々あなたに作っていただくものですので、実際に動かしてみて学習にチャレンジしてみるかどうかの判断にお使いください。
/h4:
それでは参りましょう。5テーブルの説明です。
/h3:
h3:各表の見方
・・・と思ったのですが、その前にこの後出てくる表の見方について説明しておきましょう。
table:表見本
th:フィールド,タイプ,NULL,Key,コメント
td:category_id,int(2),NO,PRI,カテゴリID
/table:
各テーブルごとに↑このような感じで表を用います。

1行が1項目です。各ヘッダが何を示すのか1つずつお伝えします。
h4:フィールド
フィールド欄にあるのはその項目の名前です。フィールド欄に並ぶ名前たちは厳密には項目の物理名といいます。

物理名とは、プログラム中で使う項目の名前です。項目を判別するにあたってコンピュータでも理解できる名称です。
/h4:
h4:タイプ
タイプはこの項目で管理するデータの型を示します。
よく使うのはvatchar2(文字列)、int(数字)、datetime(日付)です。
/h4:
h4:NULL
(https://wa3.i-3-i.info/word156.html)
NULLというのはデータが何もないという状態です。

で、この欄にはYESかNOが入りますが、NOならNULLを許容しない。YESならNULLを許容する(データがなくてもいいよ)ということです。

システム的に必ずなにかデータが入っていないといけない場合はNULLを許容しない設定にします。
/h4:
h4:Key
KeyはPrimaryKeyを示しています。これは「主キー」という意味で、そのテーブル内で一意であることを判別するための項目かどうかを示します。

Keyという値がはいっていればその項目は主キーです。1つのみにつくケースも複数で一意を表すケースもどちらもあります。
/h4:
h4:コメント
コメントはコメントです。(笑)これはなにを書いてもいい項目なのですが、基本的には項目の説明を入れます。私は物理名を入れています。

物理名とは項目のあだ名みたいなものです。フィールドにあった英数字(物理名)は謂わばコンピュータ用の名前なので分かりにくいですが、日本語で人間に分かるように示すのが物理名です。
/h4:
では、今度こそ5テーブルの説明に入ります。
/h3:
h3:カテゴリテーブル
カテゴリテーブルは記事情報をもつコンテンツたちを束ねる塊です。
table:カテゴリテーブル
th:フィールド,タイプ,NULL,Key,コメント
td:category_id,int(2),NO,PRI,カテゴリID
td:name,varchar(200),NO,,名前
td:url,varchar(200),NO,,URL
td:create_date,datetime,NO,,作成日
td:update_date,datetime,NO,,更新日
/table:
カテゴリIDはカテゴリにつけられる管理番号です。

名前は文字どおり名前ですね。

URLもそのままURLです。実際のURLはこのカテゴリがもつURLとコンテンツがもつURLを連結させた形で使います。

作成日はそのカテゴリを作成した日が登録されます。

更新日にはカテゴリを更新した日付が入ります。

はい次ぃ!
/h3:
h3:コンテンツテーブル
コンテンツテーブルは親カテゴリの子として記事情報を持つテーブルです。

必ず親カテゴリを持つような構成になっています。
table:コンテンツテーブル
th:フィールド,タイプ,NULL,Key,コメント
td:category_id,int(2),NO,PRI,カテゴリID
td:contents_id,int(3),NO,PRI,コンテンツID
td:name,varchar(200),NO,,名前
td:url,varchar(200),NO,,URL
td:disabled_flg,varchar(1),YES,,無効フラグ
td:create_date,datetime,NO,,作成日
td:update_date,datetime,NO,,更新日
/table:
カテゴリIDは先ほどのカテゴリテーブルで出てきたのと同じものです。ここに指定したカテゴリIDが親カテゴリということになります。

コンテンツIDはカテゴリ内で一意になる値を指定するコンテンツの管理番号です。

このテーブルはカテゴリIDとコンテンツIDで一意の値を持ちます。

名前は記事のタイトルを格納します。

URLはURLですね。これはカテゴリの方で説明した通り、カテゴリがもつURLと連結して意味を成します。

無効フラグは記事を起こしたけどまだ下書き状態にしておきたいときや一度公開した記事を削除はしないけど一旦非公開状態にしたいときに使用します。

作成日、更新日はその名の通り、カテゴリで説明したのと同じ内容です。

次行きましょう。
/h3:
h3:コメントテーブル
コメントテーブルはその名の通り、コメントを管理するテーブルです。

table:コメントテーブル
th:フィールド,タイプ,NULL,Key,コメント
td:serial_id,int(5),NO,PRI,シリアルID
td:category_id,int(2),NO,,カテゴリID
td:contents_id,int(3),NO,,コンテンツID
td:name,varchar(200),NO,,名前
td:comment,varchar(4000),NO,,コメント
td:disabled_flg,varchar(1),YES,,無効フラグ
td:create_date,datetime,NO,,作成日
td:update_date,datetime,NO,,更新日
/table:
ちょっとだけ項目が多めですね。

シリアルIDはコメントの管理番号です。

コメントはカテゴリIDとコンテンツIDで「どの記事についたコメントか?」という情報を保持しますが、この2つだけでは重複するので別に管理番号をもたせています。

あとは名前とコメントです。これはユーザが入力してくれるものです。

このテーブルにも先ほど同様に無効フラグを用意しています。

基本的には使いませんが、誹謗中傷があったりとかで不適切な内容は掲載したくない、でも削除はしないというときに使います。

作成日、更新日は割愛。
/h3:
h3:関連記事テーブル
関連記事テーブルです。このテーブルはある記事に対して参照させるほかの記事情報を保持します。
table:関連記事テーブル
th:フィールド,タイプ,NULL,Key,コメント
td:category_id,int(2),NO,PRI,カテゴリID
td:contents_id,int(3),NO,PRI,コンテンツID
td:relation_category_id,int(2),NO,PRI,関連カテゴリID
td:relation_contents_id,int(3),NO,PRI,関連コンテンツID
td:sort_key,int(2),YES,,ソートキー
td:create_date,datetime,NO,,作成日
td:update_date,datetime,NO,,更新日
/table:
カテゴリIDとコンテンツIDは関連元コンテンツの情報です。

関連カテゴリIDと関連コンテンツIDは関連先コンテンツの情報です。これら4項目で記事間のリレーション(関連)が組めます。

あとはソートキーも用意しています。これは表示順ですね。ランダムよりはいいだろうと思ってつけています。

次行きます。
/h3:
h3:プロパティテーブル
最後にプロパティテーブルです。

プロパティについてはこちらで説明しています。
table:プロパティテーブル
th:フィールド,タイプ,NULL,Key,コメント
td:p_key,varchar(200),NO,PRI,キー
td:value,varchar(2000),NO,,値
td:memo,varchar(2000),YES,,説明
td:sub_memo,varchar(2000),NO,,サブ説明
td:create_date,datetime,NO,,作成日
td:update_date,datetime,NO,,更新日
/table:

こちらはほかのテーブルと違いIDという数字では管理していません。
キーという文字列で管理しています。こちらは数字と違い、直接文字列でその項目のもつ意味を示すことができます。

値は値ですね。

説明はメインの説明です。主にテーブルに表示させることを使用目的としています。

サブ説明はもう少し込み入った説明を入力する想定です。実際にどんな値を設定するか、等ですね。そうすると設定時に助かります。

/h3:
h3:おわりに
以上が各テーブルの説明でした。

学習を始める前の方からすると分かりづらいところもあったかもしれません。

ですが、実際に始めてみるとちゃんと理解できるのでご安心ください。

ありがとうございました。
/h3: