JavaScriptだけでWebサイト開発

node.js + Express + mongodb系 + React でサービスを作るメモ

node.js+React CMS を設計する(データベース仕様)

nexpressスキーマ構成を定義する。
必要最低限の要件を元にシンプルな構造を定義する。

f:id:ichi-bit:20171114180334p:plain

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、外部キー

つづく

©ichi-bit