Featuresスキーマデータベース

データベース

スキーマを通してデータベースの構造を定義します。

テーブル

テーブルはデータを保存するための入れ物です。
Excelのように行と列で構成され、行はレコード、列はカラムと呼ばれます。
以下のテーブルは4つのカラムを持ち、3つのレコードが保存されています。

idnamedescriptioncolor
1AppleIt is said, “An apple a day keeps the doctor away.”red
2OrangeBorn in the Assam region of India.orange
3GrapeIt is said that there are more than 1,000 varieties of grapes in the world.purple

テーブルを設計する際には、カラムの定義が重要です。カラムによってテーブルのデータ構造が決まります。

スキーマでは、以下のようにテーブルを定義します。columns プロパティでカラムの定義を行います。カラムを定義する際は type プロパティでデータ型を指定します。

orizm.config.ts
const config = {
  tables: [
    {
      name: "blog",
      columns: [
        {
          name: "title",
          type: "string",
        },
        {
          name: "body",
          type: "string",
        },
      ],
    },
  ],
};

データ型

以下のデータ型を使用できます。

string

テキストデータを扱う際に使用します。

以下のオプションが設定できます。

オプション説明デフォルト
required必須項目であることを示します。booleanfalse
readonly読み取り専用であることを示します。booleanfalse
pattern正規表現を用いて文字列のパターンを指定します。string-
minLength文字列の最小長を指定します。number-
maxLength文字列の最大長を指定します。number-
defaultデフォルト値を指定します。string-
{
  name: "stringColumn",
  type: "string",
  required: true,
  readOnly: true,
  pattern: "^[a-zA-Z]+$",
  minLength: 1,
  maxLength: 255,
  default: "default value",
}

number

数値データを扱う際に使用します。

以下のオプションが設定できます。

オプション説明デフォルト
required必須項目であることを示します。booleanfalse
readonly読み取り専用であることを示します。booleanfalse
defaultデフォルト値を指定します。number-
{
  name: "numberColumn",
  type: "number",
  required: true,
  readOnly: true,
  default: 0,
}

boolean

真偽値を扱う際に使用します。

以下のオプションが設定できます。

オプション説明デフォルト
required必須項目であることを示します。booleanfalse
readonly読み取り専用であることを示します。booleanfalse
defaultデフォルト値を指定します。boolean-
{
  name: "booleanColumn",
  type: "boolean",
  required: true,
  readOnly: true,
  default: false,
}

json

JSONデータを扱う際に使用します。

以下のオプションが設定できます。

オプション説明デフォルト
required必須項目であることを示します。booleanfalse
readonly読み取り専用であることを示します。booleanfalse
defaultデフォルト値を指定します。object-
{
  name: "jsonColumn",
  type: "json",
  required: true,
  readOnly: true,
  default: {},
}

reference

他のテーブルのレコードを参照するためのデータ型です。リレーショナルデータベースにおける外部キーのように使用されます。

以下のプロパティを設定する必要があります。

オプション説明
tableName参照するテーブルの名前を指定します。string
onDelete参照先のレコードが削除された際の挙動を指定します。“cascade” | “set null” | “restrict”

onDelete プロパティは以下の値から選択できます。

  • cascade: 参照先のレコードが削除された際、自身のレコードも削除します。
  • set null: 参照先のレコードが削除された際、カラムの値を null に設定します。
  • restrict: 参照先のレコードの削除を拒否し、エラーとして処理します。

reference型のカラムには以下のオプションが設定できます。

オプション説明デフォルト
required必須項目であることを示します。onDelete が “set null” の場合、true にはできません。booleanfalse
readonly読み取り専用であることを示します。booleanfalse
includeName参照先のレコードを結合したときのプロパティ名を指定します。stringtableNameと同値
{
  name: "referenceColumn",
  type: "reference",
  tableName: "referenceTable",
  onDelete: "cascade",
  required: true,
  readOnly: true,
  includeName: "refCol",
}

module

テーブルモジュールをカラムに対して 1:1 の関係で紐づける際に使用します。詳細は テーブルモジュール を参照してください。

以下のプロパティを設定する必要があります。

オプション説明
moduleNameモジュールの名前を指定します。string
{
  name: "moduleColumn",
  type: "module",
  moduleName: "moduleA",
}

module-array

テーブルモジュールをカラムに対して 1:N の関係で紐づける際に使用します。詳細は テーブルモジュール を参照してください。

以下のプロパティを設定する必要があります。

オプション説明
moduleNameモジュールの名前を指定します。string
{
  name: "moduleArrayColumn",
  type: "module-array",
  moduleName: "moduleA",
}

storage

ファイルを扱う際に使用します。

storage型カラムとバケットはファイルを扱う点で似ていますが異なる点があります。バケットはシンプルなファイル置き場であるのに対し、storage型カラムはファイルをレコードに紐づけて扱えます。例えば、ブログ記事にサムネイル画像を設定する場合、storage型カラムを使用して画像ファイルをレコードに紐づけることができます。

レコードが削除された場合、ファイルは30日後に自動で削除されます。削除前であれば、編集履歴の管理機能 を利用して復元することも可能です。

以下のオプションが設定できます。

オプション説明デフォルト
readonly読み取り専用であることを示します。booleanfalse
{
  name: "storageColumn",
  type: "storage",
  readOnly: true,
}

storage型カラムにファイルを紐づけるにはCMS SDKを使用します。

最初に、uploadFile() メソッドを使用してファイルをアップロードし、戻り値として handle を取得します。

const { handle } = await orizm.tables.blog.uploadFile(file);

次に、create()update() などのメソッドを使用してレコードを作成や更新し、storage型カラムに handle を設定します。

await orizm.tables.blog.update({
  thumbnail: { handle },
});

この2ステップでファイルをレコードに紐づけることができます。

予約カラム

以下のカラムは自動でテーブルに追加されます。

id

レコードを一意に識別するためのIDです。

ランダムな16文字の英数字で構成されます。(例: MlKtexCT1v8CS4pR

id には自動で インデックス が作成されます。

createdAt

レコードが作成された日時です。

ISO 8601 形式の文字列で構成されます。(例: 2025-01-01T00:00:00.000Z

updatedAt

レコードが更新された日時です。

ISO 8601 形式の文字列で構成されます。(例: 2025-01-01T00:00:00.000Z

group

レコードの所属するグループです。権限 の設定に使用します。

任意の文字列を設定できます。デフォルトは undefined です。

インデックス

インデックスはデータの検索速度を向上させるための仕組みです。

⚠️

絞り込みや並び替えの速度が向上する反面、データの追加や更新、削除の速度は低下します。リレーショナルデータベースにおけるインデックス設計の一般的なベストプラクティスに従って、データの操作パターンを考慮して注意深く設計してください。

id カラムには自動でインデックスが作成されるため、追加の設定は不要です。

スキーマでは以下のようにテーブル定義の中で indexes プロパティを利用して設定します。

orizm.config.ts
const config = {
  tables: [
    {
      name: "employee",
      columns: [
        {
          name: "name",
          type: "string",
        },
        {
          name: "department",
          type: "string",
        },
      ],
      indexes: [
        {
          columns: ["name"],
        },
        {
          columns: ["department", "name"],
        },
      ],
    },
  ],
};

unique

unique プロパティを true にすることで、ユニーク制約を設定できます。

const config = {
  tables: [
    {
      name: "blog",
      columns: [
        {
          name: "slug",
          type: "string",
        },
        {
          name: "title",
          type: "string",
        },
      ],
      indexes: [
        {
          columns: ["slug"],
          unique: true,
        },
      ],
    },
  ],
};

高度な機能

テーブルでは以下のような高度な機能を設定できます。