コンテンツにスキップ

検索はプロダクションビルドでのみ利用可能です。 ローカルでテストするには、サイトをビルドしてプレビューしてください。

DB仕様 概要

Speakeasy は 2つの PostgreSQL データベース を使用し、業務データと認証データを分離しています。ORM には Drizzle ORM v1.0 beta を採用し、Cloudflare Hyperdrive 経由で接続プーリングを行います。


DBパッケージ用途使用サービス
Cellar@speakeasy/cellar業務データ(連絡先・チャット・店舗・配信・通知)Fizz, Vintage, Bell, Base, Tap
Vault@speakeasy/vault認証データ(ユーザー・セッション・組織・OAuth)Proof, Bell

注意: VAULT_HYPERDRIVEPROOF_HYPERDRIVE は同じ Vault DB を指しますが、サービスごとにバインディング名が異なります。


項目技術バージョン
ORMDrizzle ORM1.0.0-beta.12
マイグレーションDrizzle Kit0.31.1-beta.1
データベースPostgreSQLPrisma Postgres
接続プーリングCloudflare Hyperdrive
スキーマ定義drizzle-orm/pg-core
リレーションRelations V2 (defineRelations)

25 テーブルで構成される業務データベースです。

カテゴリテーブル数主なテーブル
連絡先4contact, contact_purelovers, contact_chat_ng, contact_chat_ng_history
チャット4chat_room, chat_message, user_room_state, chat_attachment
店舗4shop, shop_line_account, shop_transfer, shop_purelovers
一括配信1broadcast
ラベル1label
通知2shop_notification, notification_setting
店舗通知3shop_notification_setting, shop_push_subscription, shop_email_recipient
顧客通知2customer_notification_setting, customer_push_subscription
PUSH2push_subscription, push_message
ブラックリスト2domain_blacklist, global_domain_blacklist

詳細は Cellar DB 概要 を参照してください。


18 テーブルで構成される認証データベースです。better-auth のプラグインテーブルとカスタムテーブルを含みます。

カテゴリテーブル数主なテーブル
ユーザー4user, session, account, verification
組織5organization, member, organizationRole, memberRole, invitation
APIキー・パスキー2apikey, passkey
OAuth4oauthApplication, oauthAccessToken, oauthConsent, scimProvider
カスタム2outerMail, outerPhone

詳細は Vault DB 概要 を参照してください。


全テーブルは text 型の id カラムを主キーとして使用します(UUID v4)。

id: p.text().primaryKey();

全テーブルに createdAt / updatedAt カラムを持ちます。

createdAt: p.timestamp('createdAt', { withTimezone: true, precision: 3 }).defaultNow().notNull();
updatedAt: p.timestamp('updatedAt', { withTimezone: true, precision: 3 }).defaultNow().notNull();
  • タイムゾーン付き(withTimezone: true
  • ミリ秒精度(precision: 3
  • デフォルト値: NOW()
種別パターン
通常インデックス{table}_{column}_idxcontact_shopId_idx
ユニークインデックス{table}_{columns}_keycontact_chat_ng_contactId_ngType_key
複合インデックス{table}_{col1}_{col2}_idxchat_message_roomId_sentAt_idx
GIN インデックス{table}_{column}_idx (using: ‘gin’)notification_setting_channels_idx

Drizzle ORM v1.0 beta の Relations V2 (defineRelations) を使用しています。

import { defineRelations } from 'drizzle-orm';
export const relations = defineRelations(schema, (r) => ({
// one-to-many
shop: {
contacts: r.many.contact(),
chatRooms: r.many.chatRoom()
},
// many-to-one
contact: {
shop: r.one.shop({
from: r.contact.shopId,
to: r.shop.id
})
}
}));

詳細は Cellar リレーション / Vault リレーション を参照してください。


ページ内容
Cellar DB 概要業務 DB 全テーブル一覧
Vault DB 概要認証 DB 全テーブル一覧
ER図全テーブルの関係図(Mermaid)
マイグレーション管理Drizzle Kit によるマイグレーション手順