データベース
スキーマを通してデータベースの構造を定義します。
テーブル
テーブルはデータを保存するための入れ物です。
Excelのように行と列で構成され、行はレコード、列はカラムと呼ばれます。
以下のテーブルは4つのカラムを持ち、3つのレコードが保存されています。
id | name | description | color |
---|---|---|---|
1 | Apple | It is said, “An apple a day keeps the doctor away.” | red |
2 | Orange | Born in the Assam region of India. | orange |
3 | Grape | It is said that there are more than 1,000 varieties of grapes in the world. | purple |
テーブルを設計する際には、カラムの定義が重要です。カラムによってテーブルのデータ構造が決まります。
スキーマでは、以下のようにテーブルを定義します。columns
プロパティでカラムの定義を行います。カラムを定義する際は type
プロパティでデータ型を指定します。
const config = {
tables: [
{
name: "blog",
columns: [
{
name: "title",
type: "string",
},
{
name: "body",
type: "string",
},
],
},
],
};
データ型
以下のデータ型を使用できます。
string
テキストデータを扱う際に使用します。
以下のオプションが設定できます。
オプション | 説明 | 型 | デフォルト |
---|---|---|---|
required | 必須項目であることを示します。 | boolean | false |
readonly | 読み取り専用であることを示します。 | boolean | false |
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 | 必須項目であることを示します。 | boolean | false |
readonly | 読み取り専用であることを示します。 | boolean | false |
default | デフォルト値を指定します。 | number | - |
{
name: "numberColumn",
type: "number",
required: true,
readOnly: true,
default: 0,
}
boolean
真偽値を扱う際に使用します。
以下のオプションが設定できます。
オプション | 説明 | 型 | デフォルト |
---|---|---|---|
required | 必須項目であることを示します。 | boolean | false |
readonly | 読み取り専用であることを示します。 | boolean | false |
default | デフォルト値を指定します。 | boolean | - |
{
name: "booleanColumn",
type: "boolean",
required: true,
readOnly: true,
default: false,
}
json
JSONデータを扱う際に使用します。
以下のオプションが設定できます。
オプション | 説明 | 型 | デフォルト |
---|---|---|---|
required | 必須項目であることを示します。 | boolean | false |
readonly | 読み取り専用であることを示します。 | boolean | false |
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 にはできません。 | boolean | false |
readonly | 読み取り専用であることを示します。 | boolean | false |
includeName | 参照先のレコードを結合したときのプロパティ名を指定します。 | string | tableNameと同値 |
{
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 | 読み取り専用であることを示します。 | boolean | false |
{
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
プロパティを利用して設定します。
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,
},
],
},
],
};
高度な機能
テーブルでは以下のような高度な機能を設定できます。