node.js+React CMS を設計する(データベース仕様)
nexpressスキーマ構成を定義する。
必要最低限の要件を元にシンプルな構造を定義する。
1. Schemaに対する要件
- ユーザー登録がエントリーポイント
- ユーザー
- ユーザーはサイトを複数作成できる
- サイトを新規作成したとき、自動的にそのサイトの最高権限ユーザーとなる
- ユーザーは自他含め複数のサイトに属する事ができる
- サイト内での権限(role)を付与される
- カテゴリ
- サイト単位でカテゴリを定義できる
- カテゴリは階層構造を取る
- カテゴリは他のカテゴリの子となることができる
- タグ
- サイト単位でタグを定義できる
- タグは短いキーワードとして登録する
- コンテンツ
- コンテンツはサイトおよび作成したユーザーに属す
- コンテンツには公開期間を設定できる
- コンテンツは複数のカテゴリに属することができ、かつカテゴリをキーとして検索できる
- コンテンツにはタグを付与でき、かつタグをキーとして検索できる
2. Schema定義
user
ユーザー情報
フィールド名 | 型 | 概要 |
---|---|---|
user_id | String | ユーザーID、登録時に自動生成 |
login | String | ログインアカウント |
password | String | パスワード、暗号化して格納 |
name | String | 表示名 |
site
サイト情報
フィールド名 | 型 | 概要 |
---|---|---|
site_id | String | サイトID、登録時に自動生成 |
name | String | 管理用名称 |
title | String | 表示用サイトタイトル |
user_site
ユーザーとサイトのリレーション
フィールド名 | 型 | 概要 |
---|---|---|
site_id | String | サイトID外部キー |
user_id | String | ユーザーID外部キー |
role | String | 権限 |
content
コンテンツ情報
フィールド名 | 型 | 概要 |
---|---|---|
content_id | String | 記事ID、作成時に自動生成 |
site_id | String | サイトID外部キー |
user_id | String | ユーザーID外部キー |
name | String | 表示用のカテゴリ名称 |
title | String | 記事タイトル |
summary | String | 記事サマリー、リード文 |
image | String | アイキャッチ画像のアップロードパス |
publish_date | Date | 掲載日時 |
expire_date | Date | 掲載終了 |
article | String | 記事本文(JSON形式で本文構造を保存する予定もしくはembed) |
category
カテゴリ情報
フィールド名 | 型 | 概要 |
---|---|---|
category_id | String | カテゴリID、作成時に自動生成 |
site_id | String | サイトID外部キー |
name | String | 表示用のカテゴリ名称 |
slug | String | カテゴリのURLスラッグ |
category_category
カテゴリ間のリレーション
フィールド名 | 型 | 概要 |
---|---|---|
parent_category_id | String | カテゴリID、外部キー、親のカテゴリID |
category_id | String | カテゴリID、外部キー |
content_category
記事とカテゴリ間のリレーション
フィールド名 | 型 | 概要 |
---|---|---|
content_id | String | 記事ID、外部キー |
category_id | String | カテゴリID、外部キー |
tag
タグ情報
フィールド名 | 型 | 概要 |
---|---|---|
site_id | String | サイトID外部キー |
tag_id | String | タグID、作成時に自動生成 |
name | String | タグワード |
content_tag
記事とタグ間のリレーション
フィールド名 | 型 | 概要 |
---|---|---|
content_id | String | 記事ID、外部キー |
tag_id | String | タグID、外部キー |
つづく