Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

SQLスキーマ

rudis-cmsはスキーマ定義に基づいてSQLテーブルを自動生成します。

生成されるテーブル

以下のようなスキーマの場合:

table: posts
schema:
  id:
    type: id
  title:
    type: string
    required: true
  date:
    type: date
    index: true
  body:
    type: markdown
    storage:
      type: kv
      namespace: content
  tags:
    type: records
    table: post_tags
    inherit_ids: [post_id]
    schema:
      tag:
        type: id

以下のSQLが生成されます:

CREATE TABLE IF NOT EXISTS posts (
  id TEXT NOT NULL,
  title TEXT NOT NULL,
  date TEXT NOT NULL,
  body TEXT NOT NULL,
  PRIMARY KEY (id)
);
CREATE INDEX IF NOT EXISTS index_posts_id ON posts(id);
CREATE INDEX IF NOT EXISTS index_posts_date ON posts(date(date));

CREATE TABLE IF NOT EXISTS post_tags (
  post_id TEXT NOT NULL,
  tag TEXT NOT NULL,
  FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE,
  PRIMARY KEY (post_id, tag)
);
CREATE INDEX IF NOT EXISTS index_post_tags_tag ON post_tags(tag);

型マッピング

rudis-cms型SQLite型備考
idTEXT NOT NULL主キー
stringTEXTrequiredの場合NOT NULL
booleanINTEGER0または1
dateTEXTISO 8601形式
datetimeTEXTISO 8601形式
hashTEXTBLAKE3ハッシュ
markdownTEXTストレージポインター付きJSON
imageTEXTストレージポインター付きJSON
fileTEXTストレージポインター付きJSON

ストレージポインター

コンテンツフィールド(markdown、image、file)はJSONとして保存されます:

{
  "hash": "abc123def456...",
  "size": 12345,
  "content_type": "text/markdown",
  "pointer": "kv://namespace-id/key"
}

外部キー

records型で作成される子テーブルには以下が含まれます:

  • ON DELETE CASCADE付きの外部キー制約
  • 親IDを含む複合主キー

生成されたSQLの確認

CLIを使用して生成されたSQLを確認できます:

rudis-cms -c config.yaml show-schema sql