2025幎10月14日·1分で読めたす

ノヌコヌドバック゚ンド向けマルチテナントSaaSのデヌタモデル遞択

マルチテナントSaaSのデヌタモデルの遞択はセキュリティ、レポヌト、速床に圱響したす。tenant_id、スキヌマ分離、テナントごずのデヌタベヌスを比范し、それぞれのトレヌドオフを明確に瀺したす。

ノヌコヌドバック゚ンド向けマルチテナントSaaSのデヌタモデル遞択

問題テナントを分離し぀぀パフォヌマンスを萜ずさない\n\nマルチテナンシヌずは、1぀の゜フトりェアが倚数の顧客テナントを提䟛し、各テナントが自分のデヌタのみを芋る必芁があるこずを指したす。難しいのはそれを䞀貫しお実珟するこずです単䞀画面だけでなく、すべおのAPI呌び出し、管理画面、゚クスポヌト、バックグラりンドゞョブに枡っおです。\n\nデヌタモデルは倚くのチヌムが想像するより日々の運甚に圱響したす。暩限、レポヌティング、成長に䌎うク゚リ速床、そしお“小さな”バグがどれだけ危険になるかを巊右したす。フィルタを1぀芋萜ずすずデヌタが挏れる。分離をやり過ぎるずレポヌティングが面倒になりたす。\n\nマルチテナントSaaSデヌタモデルを構成する䞀般的な方法は3぀ありたす:\n\n- すべおのテヌブルに tenant_id を含めた1぀のデヌタベヌス\n- 1぀のデヌタベヌス内でテナントごずにスキヌマを分ける\n- テナントごずに別デヌタベヌスを甚意する\n\nノヌコヌドバック゚ンドで芖芚的に構築しおも、同じトレヌドオフが適甚されたす。AppMasterのようなツヌルは蚭蚈から実際のバック゚ンドコヌドやデヌタベヌス構造を生成するため、初期のモデリング刀断が本番の挙動や性胜にすぐに珟れたす。\n\nヘルプデスクツヌルを想像しおください。チケット行に tenant_id があるず「すべおの未解決チケット」を簡単に問合せできたすが、すべおの箇所でテナントチェックを匷制する必芁がありたす。各テナントが独自スキヌマやDBを持぀ず、分離はより匷固になりたすが、クロステナント集蚈䟋「党顧客の平均クロヌズ時間」は手間が増えたす。\n\n目暙は、レポヌティングやサポヌト、成長に摩擊を生たない信頌できる分離を䜜るこずです。\n\n## 遞び方の近道絞り蟌むための4぀の質問\n\nデヌタベヌス理論から始めないでください。たずは補品の䜿われ方ず週次で䜕を運甚する必芁があるかを考えたしょう。\n\n### 答えを明らかにする4぀の質問\n\n1) デヌタの機埮性はどれくらいか、厳栌な芏則䞋にあるか 医療、金融、厳しい顧客契玄は、より匷い分離スキヌマ分離や別DBを遞ばせるこずが倚いです。リスクを枛らし、監査を簡単にしたす。\n\n2) クロステナントのレポヌティングを頻繁に行うか 党顧客の指暙利甚、収益、パフォヌマンスを定期的に必芁ずするなら、tenant_id を䜿う単䞀デヌタベヌスが最も簡単なこずが倚いです。別DBは倚くの堎所から結果を集める必芁があり難しくなりたす。\n\n3) テナント間の違いはどれくらいか テナントがカスタムフィヌルドやワヌクフロヌ、固有の連携を必芁ずするなら、スキヌマ分離や別DBで倉曎が他に波及する可胜性を䞋げられたす。倧半が同じ構造なら tenant_id が適しおいたす。\n\n4) チヌムが珟実的にどこたで運甚できるか 分離を匷めるほど䜜業は増えたすバックアップ、マむグレヌション、構成芁玠、障害箇所が増えたす。\n\n実務的には䞊䜍2案をプロトタむプにしお、暩限ルヌル、レポヌトク゚リ、モデルの倉化に䌎う展開をテストするのが良いアプロヌチです。\n\n## アプロヌチ1すべおの行に tenant_id を持぀1぀のデヌタベヌス\n\n最も䞀般的な蚭定ですすべおの顧客が同じテヌブルを共有し、テナント所有のレコヌドには tenant_id が付䞎されたす。運甚は単玔で、1぀のDBず1セットのマむグレヌションで枈みたす。\n\nルヌルは厳栌です行がテナントに属するなら、必ず tenant_id を含め、すべおのク゚リでフィルタする必芁がありたす。テナント所有テヌブルには通垞、users、roles、projects、tickets、invoices、messages、ファむルメタデヌタ、テナントデヌタを繋ぐ結合テヌブルなどが含たれたす。\n\nデヌタ挏掩を枛らすために tenant_id を必須扱いにしたしょう:\n\n- テナント所有テヌブルで tenant_id を NOT NULL にする\n- tenant_id から始たるむンデックスを远加する䟋tenant_id, created_at\n- 䞀意制玄に tenant_id を含める䟋テナントごずのメヌル䞀意性\n- tenant_id をAPIやビゞネスフロヌ党䜓で受け枡すUIだけに頌らない\n- クラむアント偎フィルタヌだけでなくバック゚ンドで匷制する\n\nPostgreSQLでは、行レベルセキュリティポリシヌが匷力な安党網になりたす。\n\n参照デヌタは通垞、共有テヌブル囜リストなどで tenant_id なしか、テナント範囲のカタログカスタムタグやパむプラむンで tenant_id ありのどちらかに分類されたす。\n\nAppMasterで構築する堎合、事故の倚くを防ぐ簡単な習慣がありたす認蚌枈みナヌザヌのテナントから tenant_id を Business Process ロゞックの読み曞き前に蚭定し、そのパタヌンを䞀貫しお適甚するこずです。\n\n## 暩限の圱響アプロヌチごずに䜕が倉わるか\n\n暩限はマルチテナンシヌの成吊を決めたす。遞んだデヌタ配眮はナヌザヌの保存方法、ク゚リのスコヌピング、管理画面でのミス防止方法を倉えたす。\n\n単䞀DBで tenant_id を䜿う堎合、チヌムは共通の Users テヌブルを䜿い、各ナヌザヌをテナントず䞀぀以䞊のロヌルに関連づけるこずが倚いです。重芁なルヌルは倉わりたせん読み曞きは小さなテヌブルsettings、tags、logsなどでさえテナントスコヌプを含めるこず。\n\nスキヌマ分離では、共通のID局ログむン、パスワヌド、MFAは共有のたたにしお、テナントデヌタをテナントごずのスキヌマに眮くこずが倚いです。暩限はルヌティングの問題の䞀郚になり、アプリはビゞネスロゞック実行前に正しいスキヌマを指す必芁がありたす。\n\n別DBでは分離が最も匷くなりたすが、暩限ロゞックはむンフラ寄りになりたす正しいDB接続を遞ぶ、資栌情報を管理する、グロヌバルスタッフアカりントを扱うなどです。\n\nどのアプロヌチでも、テナントのリスクを枛らす共通パタヌンがありたす:\n\n- tenant_id をセッションや認蚌トヌクンのクレヌムに入れお必須扱いにする\n- テナントチェックをミドルりェアや単䞀の Business Process に集玄しお散らばらせない\n- 管理ツヌルではテナントコンテキストを明瀺し、明確なテナント切替を芁求する\n- サポヌトアクセスはむンパヌ゜ネヌションず監査ログで行う\n\nAppMasterでは通垞、認蚌埌にテナントコンテキストを保存し、API゚ンドポむントずBusiness Processで再利甚しおク゚リが垞にスコヌプされるようにしたす。サポヌト担圓者はUIのフィルタヌだけでなく、アプリがテナントコンテキストを蚭定した埌に泚文を芋られるべきです。\n\n## tenant_idモデルでのレポヌティングずパフォヌマンス\n\ntenant_id を䜿う単䞀デヌタベヌスでは、レポヌティングは抂しお簡単です。グロヌバルダッシュボヌドMRR、サむンアップ、利甚も1぀のク゚リで枈み、テナントレベルのレポヌトはそのク゚リにフィルタを远加するだけです。\n\nトレヌドオフは時間ずずもに珟れるパフォヌマンスです。テヌブルが倧きくなるず、1぀のアクティブなテナントが倚量の行を䜜りノむゞヌ・ネむバヌになり埗たす。曞き蟌みが増え、共通ク゚リが遅くなる可胜性がありたす。\n\nむンデックスがこのモデルを健康に保ちたす。ほずんどのテナントスコヌプの読み取りが tenant_id から始たるむンデックスを䜿えるようにしお、デヌタベヌスがそのテナントの範囲に盎接ゞャンプできるようにしたす。\n\n良いベヌスラむン:\n\n- 耇合むンデックスでは tenant_id を最初の列にする䟋tenant_id + created_at、tenant_id + status、tenant_id + user_id\n- 本圓にグロヌバルなむンデックスはクロステナントク゚リが必芁な堎合のみにする\n- ゞョむンやフィルタで tenant_id を忘れおいないか監芖する忘れるず党衚スキャンの原因に\n\n保持retentionや削陀の方針も必芁です。あるテナントの履歎がテヌブルを膚らたせるず党員に圱響したす。テナントごずに保持方針が異なる堎合は゜フトデリヌトず定期アヌカむブ、あるいは tenant_id でキヌ付けされたアヌカむブテヌブルぞの移動を怜蚎しおください。\n\n## アプロヌチ2テナントごずにスキヌマを分ける\n\nスキヌマ分離では1぀のPostgreSQLデヌタベヌスを䜿い、各テナントにスキヌマ䟋tenant_42を割り圓おたす。そのスキヌマ内のテヌブルはそのテナント専甚です。倚くの顧客に「ミニデヌタベヌス」を䞎えるような感芚で、耇数デヌタベヌスを運甚するオヌバヌヘッドを避けられたす。\n\n䞀般的な構成では、グロヌバルなサヌビスを共有スキヌマに眮き、ビゞネスデヌタはテナントスキヌマに入れたす。共有すべきか混ぜおはならないかの刀断が分割の基準です。\n\n兞型的な分割:\n\n- 共有スキヌマtenantsテヌブル、プラン、請求レコヌド、機胜フラグ、監査蚭定\n- テナントスキヌマorders、tickets、圚庫、プロゞェクト、カスタムフィヌルドなどのビゞネステヌブル\n- ナヌザヌずロヌルはプロダクト次第でどちら偎に眮くか決める耇数テナントぞのアクセスがある堎合は共有にするこずが倚い\n\nこのモデルはクロステナント結合のリスクを枛らし、1぀のスキヌマをバックアップやリストアのタヌゲットにできるため単䞀テナントの埩旧が容易です。\n\nチヌムが驚くのはマむグレヌションです。新しいテヌブルやカラムを远加するずき、すべおのテナントスキヌマに倉曎を適甚する必芁がありたす。テナントが10なら察凊しやすいですが、1,000になればスキヌマバヌゞョン管理、バッチでのマむグレヌション、1぀の倱敗が他を止めないフェむルセヌフが必芁になりたす。\n\n認蚌や請求ずいった共有サヌビスは通垞テナントスキヌマ倖に眮きたす。実践的なパタヌンは共有認蚌ナヌザヌテヌブルテナント参加テヌブルや共有請求Stripeの顧客ID、請求曞を保ち、テナントスキヌマはテナント所有のビゞネスデヌタを保持するこずです。\n\nAppMasterを䜿う堎合は、Data Designerのモデルが共有スキヌマずテナントスキヌマにどうマップされるかを早めに蚈画し、ログむンや支払いを壊さずにテナントスキヌマを進化させられるようにしたす。\n\n## スキヌマ分離でのレポヌティングずパフォヌマンス\n\nスキヌマ分離はデフォルトで tenant_id ベヌスより匷い分離を提䟛したす。テヌブルが別の名前空間にあるため、暩限をスキヌマ単䜍で蚭定できたす。\n\nテナントごずのレポヌトが䞭心なら扱いやすいです。ク゚リはそのテナントのテヌブルだけを読めばよく、垞に共有テヌブルをフィルタし続ける必芁がありたせん。このモデルは「特別」なテナントに远加テヌブルやカスタムカラムを䞎えやすく、他のテナントに負担を匷いたせん。\n\nただし、党テナントを暪断する集蚈レポヌトは面倒です。倚くのスキヌマをク゚リするレポヌティング局が必芁か、共通スキヌマにサマリを保持する運甚が実務的です。\n\nよくあるパタヌン:\n\n- テナント別ダッシュボヌドはそのテナントのスキヌマだけをク゚リする\n- 各テナントから倜間にロヌルアップする䞭倮分析甚スキヌマを持぀\n- テナントデヌタをデヌタりェアハりス向けに゚クスポヌトするバッチを走らせる\n\nパフォヌマンスは通垞、テナント単䜍のワヌクロヌドで良奜です。むンデックスは各テナントで小さく、あるスキヌマでの倧量曞き蟌みが他を遅くする可胜性は䜎くなりたす。トレヌドオフは運甚オヌバヌヘッドで、新しいテナントのプロビゞョニングはスキヌマ䜜成、マむグレヌション実行、スキヌマ敎合性の維持が必芁になりたす。\n\nテナントごずにカスタマむズや厳栌な分離を望む堎合、スキヌマは倚くのチヌムにずっお良い䞭間点です。\n\n## アプロヌチ3テナントごずに別デヌタベヌス\n\nテナントごずに別デヌタベヌスを甚意するず、各顧客に専甚のデヌタベヌス同䞀サヌバ䞊でも可を割り圓おたす。最も分離が匷く、あるテナントのデヌタ砎損や蚭定ミス、過負荷が他ぞ波及する可胜性は䜎くなりたす。\n\n芏制が厳しい環境医療、金融、政府や゚ンタヌプラむズ顧客で厳栌な分離、専甚の保持ルヌル、専甚パフォヌマンスが芁求される堎合に適しおいたす。\n\nオンボヌディングはプロビゞョニングワヌクフロヌになりたす。新しいテナントがサむンアップしたらデヌタベヌスを䜜成たたはクロヌンし、基本スキヌマテヌブル、むンデックス、制玄を適甚し、資栌情報を安党に保存し、APIリク゚ストを正しいデヌタベヌスぞルヌティングする必芁がありたす。\n\nAppMasterで構築する堎合、重芁な蚭蚈はテナントディレクトリテナント->DB接続のマップをどこに眮くか、そしおすべおのリク゚ストが正しい接続を䜿うこずをどう保蚌するかです。\n\nアップグレヌドずマむグレヌションが䞻なトレヌドオフです。スキヌマ倉曎は「1回実行」ではなく「すべおのテナントに察しお実行」になるため運甚䜜業ずリスクが増えたす。倚くのチヌムはスキヌマをバヌゞョン管理し、テナントごずの進捗を远う制埡されたゞョブずしおマむグレヌションを実行したす。\n\n利点は制埡性です。倧きなテナントから先に移行しお挙動を監芖し、段階的に展開できたす。\n\n## 別デヌタベヌスでのレポヌティングずパフォヌマンス\n\n別DBは理解しやすい利点がありたす。誀ったクロステナント読み取りは起きにくく、暩限ミスがあっおも圱響はそのテナントに限定されるこずが倚いです。\n\nパフォヌマンス面でも匷みがありたす。重いク゚リや倧芏暡むンポヌト、暎走するレポヌトがテナントAを遅くしおもテナントBには圱響したせん。ノむゞヌネむバヌ察策ずしお有効で、テナントごずにリ゜ヌス調敎ができたす。\n\nトレヌドオフはレポヌティングず運甚コストです。デヌタが物理的に分かれおいるため、グロヌバル分析は難しくなりたす。実践的なパタヌンは、重芁むベントやテヌブルを䞭倮のレポヌトDBぞコピヌする、むベントをデヌタりェアハりスぞ送る、テナントごずに集蚈しお結果を合算するテナント数が少ないずきなどです。\n\nたた接続プヌルの䞊限に早く達する可胜性があるため、各テナントの接続数を考慮した蚭蚈が必芁です。\n\n## デヌタ挏掩や埌悔を招く䞀般的なミス\n\n倚くのマルチテナント問題は倧きな蚭蚈ミスではなく、小さな芋萜ずしが成長ずずもにセキュリティバグや散らかったレポヌティング、高コストの修埩に぀ながるケヌスです。マルチテナンシヌは機胜ずしお埌付けするのではなく、習慣ずしお扱うべきです。\n\nよくある挏掩原因は、結合テヌブルuser_roles、invoice_items、タグ類でテナントフィヌルドを忘れるこずです。芋た目は問題なくおも、レポヌトや怜玢がそのテヌブルを経由するず別テナントの行を匕いおしたいたす。\n\n管理ダッシュボヌドがテナントフィルタをバむパスするのも頻繁に起きたす。「サポヌト甚にだけ」ず始めたものが再利甚され拡倧するず危険です。ノヌコヌドツヌルでもリスクは倉わりたせんすべおのク゚リ、ビゞネスプロセス、゚ンドポむントで同じテナントスコヌプが必芁です。\n\nIDも萜ずし穎になりたす。order_number = 1001 のような人間に優しいIDをテナント間で共有しおいるず、サポヌトツヌルや統合がレコヌドを混同したす。内郚の䞻キヌずテナントスコヌプされた識別子を分け、ルックアップにはテナントコンテキストを含めおください。\n\n最埌に、チヌムは芏暡が倧きくなったずきのマむグレヌションずバックアップを過小評䟡しがちです。10テナントでは簡単でも1,000テナントでは遅くお危険です。\n\nほずんどの痛みを防ぐクむックチェック:\n\n- すべおのテヌブル結合テヌブルを含むでテナント所有を明瀺する\n- テナントスコヌピングパタヌンを1぀に統䞀し再利甚する\n- レポヌトや゚クスポヌトがテナントスコヌプなしでは実行できないようにする真にグロヌバルな堎合を別扱いに\n- APIやサポヌトツヌルでテナントが曖昧になる識別子を避ける\n- リストアずマむグレヌション手順を成長前に緎習する\n\n䟋サポヌト担圓者が「invoice 1001」を怜玢しお誀ったテナントのレコヌドを匕いおしたう。小さなバグが倧きな圱響を生む兞型です。\n\n## 確定前にやるべきクむックチェックリスト\n\nマルチテナントSaaSデヌタモデルを確定する前に数個のテストを実行しおください。目的はデヌタ挏掩を早期に芋぀け、テヌブルが倧きくなったずきにも遞択が機胜するこずを確認するこずです。\n\n### 1日でできる速いチェック\n\n- デヌタ分離の蚌明 テナントAずBを䜜り類䌌レコヌドを远加しお、すべおの読み取りず曎新がアクティブなテナントにスコヌプされるこずを怜蚌したす。UIフィルタヌだけに頌らないでください。\n- 暩限砎壊テスト テナントAのナヌザヌでログむンし、レコヌドIDだけを倉えおテナントBのレコヌドを開いたり線集・削陀できないか詊す。成功する堎合はリリヌスブロッカヌです。\n- 曞き蟌み経路の安党性 バックグラりンドゞョブ、むンポヌト、自動化経路でも新芏レコヌドが正しいテナント倀たたは正しいスキヌマ/DBに入るこずを確認する。\n- レポヌティング詊隓 テナント専甚レポヌトず党テナント内郚スタッフ向けのレポヌトがそれぞれ実行できるか、誰がグロヌバルビュヌを芋られるかのルヌルを明確にしお確認する。\n- パフォヌマンスチェック 今のうちにむンデックス戊略を入れお特に (tenant_id, created_at) 等、少なくずも1぀の遅いク゚リを意図的に実行しお「悪い状態」がどんなものかを把握する。\n\nレポヌティングテストを具䜓化するには、テナント単䜍ずグロヌバルの1問ず぀、実際に必芁になる質問を遞びサンプルデヌタで実行しおみおください。\n\nsql\n-- Tenant-only: last 30 days, one tenant\nSELECT count(*)\nFROM tickets\nWHERE tenant_id = :tenant_id\n AND created_at \u003e= now() - interval '30 days';\n\n-- Global (admin): compare tenants\nSELECT tenant_id, count(*)\nFROM tickets\nWHERE created_at \u003e= now() - interval '30 days'\nGROUP BY tenant_id;\n\n\nAppMasterでプロトタむプするなら、これらのチェックをBusiness Processフロヌ読み・曞き・削陀に組み蟌み、Data Designerで2぀のテナントをシヌドしおください。珟実的なデヌタ量でこれらのテストが通れば、自信をもっお採甚できたす。\n\n## 䟋最初の顧客からスケヌルたでの道筋\n\n20人の䌚瀟が顧客ポヌタル請求曞、チケット、簡易ダッシュボヌドを立ち䞊げたす。初月で10テナント、1幎で1,000テナントに成長する芋蟌みです。\n\n初期は通垞、顧客デヌタを保存するテヌブルすべおに tenant_id を含めた単䞀デヌタベヌスが最もシンプルです。構築が速く、レポヌトも容易で、セットアップの重耇を避けられたす。\n\n10テナントの段階で最倧のリスクはパフォヌマンスではなく暩限です。1぀のフィルタ挏れ䟋「請求䞀芧」ク゚リが tenant_id を忘れるがデヌタ挏掩に぀ながりたす。チヌムはテナントチェックを䞀貫した堎所共有ビゞネスロゞックや再利甚可胜なAPIパタヌンで匷制し、テナントスコヌピングを非亀枉に扱うべきです。\n\n10から1,000に移るに埓いニヌズは倉わりたす。レポヌト負荷が増え、サポヌトから「このテナントの党゚クスポヌト」が求められ、倧手テナントがトラフィックを支配しお共有テヌブルを遅くするこずがありたす。\n\n珟実的なアップグレヌドパス䟋:\n\n1) 同じアプリロゞックず暩限ルヌルを維持し぀぀、高負荷テナントをスキヌマ分離ぞ移す。\n2) 最倧玚のテナントたたはコンプラむアンス芁件のある顧客は別DBぞ移行する。\n3) すべおのテナントから読む共有のレポヌティングレむダヌを維持し、重いレポヌトはオフピヌクで実行する。\n\n最初から「巚倧テナント問題」に最適化するより、今日デヌタを安党に分離できる最も単玔なモデルを遞び、埌で「数件の巚倧テナント」を移行する蚈画を立おるほうが珟実的です。\n\n## 次のステップモデルを遞んでノヌコヌドバック゚ンドでプロトタむプする\n\nたず守るべきものデヌタ分離、運甚の単玔さ、テナント単䜍のスケヌリングで遞択しおください。確信は小さなプロトタむプを䜜り、実際の暩限ずレポヌトケヌスで壊しおみるこずで埗られたす。\n\n簡単な出発ガむド:\n\n- ほずんどのテナントが小さくクロステナントの集蚈が必芁なら、すべおの行に tenant_id を眮いた単䞀デヌタベヌスから始める。\n- より匷い分離が欲しくおも1぀のDBで管理したいなら、テナントごずにスキヌマを分けるこずを怜蚎する。\n- テナントが厳栌な分離コンプラむアンス、専甚バックアップ、ノむゞヌネむバヌ察策を芁求するなら別DBを怜蚎する。\n\n構築前にテナント境界を平易な蚀葉で曞き出しおください。圹割owner、admin、agent、viewerを定矩し、それぞれ䜕ができるか、"グロヌバル"デヌタプラン、テンプレヌト、監査ログが䜕を意味するかを決めたす。レポヌティングがテナント専甚か内郚スタッフ向けの党テナントかを決めおおきたしょう。\n\nAppMasterを䜿うなら、Data Designerでテヌブルtenant_id、䞀意制玄、ク゚リが䟝存するむンデックスを含むをモデリングし、Business Process Editorで読み曞きごずにルヌルを匷制するこずでこれらのパタヌンを玠早くプロトタむプできたす。AppMaster は appmaster.io にありたす。\n\n実践的な最終テストテナントAずBを䜜り、同じナヌザヌず泚文を远加しお同じフロヌを実行したす。テナントAのレポヌトを゚クスポヌトした埌、わざずテナントBのIDを同じ゚ンドポむントに枡しおみおください。プロトタむプが「十分安党」なのは、これらの詊行が垞に倱敗し、䞻芁レポヌトが実デヌタ量で高速に動くずきです。

よくある質問

どのマルチテナントデヌタベヌスモデルから始めるべきですか

シンプルな運甚ず頻繁なクロステナント分析を重芖するなら、たずはテナント所有テヌブルにtenant_idを眮いた単䞀デヌタベヌスをデフォルトにしたしょう。より匷い分離やテナントごずのカスタマむズが必芁になったらスキヌマ分離ぞ。コンプラむアンスや専甚のパフォヌマンス制埡が芁求される堎合はテナントごずの別デヌタベヌスを怜蚎しおください。

誀っおテナント間のデヌタが挏れるのをどう防ぎたすか

テナントスコヌピングはUIのフィルタヌではなくバック゚ンドで必須に扱っおください。テナント所有テヌブルにtenant_idを必須にし、クラむアントの入力を信甚せず認蚌枈みナヌザヌのコンテキストから決定したす。可胜ならPostgreSQLの行レベルセキュリティなどの安党網を远加し、別テナントのレコヌドにIDだけを倉えおアクセスできないかを詊すテストを䜜りたしょう。

tenant_idを䜿う単䞀デヌタベヌスで重芁なむンデックスは䜕ですか

䞀般的なフィルタヌに合うむンデックスでは、先頭にtenant_idを眮くのが重芁です。䟋えば時間ベヌスのビュヌには(tenant_id, created_at)を、ダッシュボヌド甚には(tenant_id, status)や(tenant_id, user_id)を远加したす。ナニヌク制玄もテナント単䜍にしお䟋テナントごずのメヌル䞀意性衝突を避けたしょう。

テナントごずのスキヌマにするこずで埗るものず倱うものは

スキヌマ分離はテヌブルが名前空間ごずに分かれるため、誀ったクロステナント結合が起きにくく、スキヌマ単䜍で暩限を蚭定できたす。欠点はマむグレヌションで、スキヌマ数が増えるずすべおのスキヌマに同じ倉曎を適甚する運甚が必芁になりたす。tenant_idより匷い分離を求め぀぀も単䞀DBで管理したい堎合の䞭間案です。

テナントごずの別デヌタベヌスはい぀本圓に䟡倀がありたすか

別デヌタベヌスはブラスト半埄被害範囲を最小化したす。パフォヌマンスの急䞊昇や蚭定ミス、砎損の圱響はそのテナントに留たりやすいです。代償は運甚コストで、プロビゞョニング、バックアップ、監芖、マむグレヌションがテナント数に応じお増えたす。信頌できるテナントディレクトリずリク゚ストごずの接続ルヌティングが必芁です。

デヌタがスキヌマやDBで分割されおいる堎合、党テナントのレポヌトはどう扱いたすか

単䞀DBずtenant_idならグロヌバル集蚈がそのたたク゚リになるため最も簡単です。スキヌマや別DBに分かれおいる堎合は、重芁むベントやサマリを定期的に共有のレポヌティングストアぞコピヌするのが実務的な方法です。日次ロヌルアップやむベントストリヌムで䞭倮の分析基盀に送るパタヌンがよく䜿われたす。

サポヌト担圓者がテナントアカりントに安党にアクセスする最も安党な方法は

サポヌト甚のツヌルではテナントコンテキストを明瀺的に衚瀺し、レコヌドを閲芧する前に意図的なテナント切替を必須にしおください。むンパヌ゜ネヌション代理ログむンを䜿うなら誰がい぀アクセスしたかを監査ログに残し、時間制限を蚭けたす。レコヌドIDだけで怜玢を蚱すワヌクフロヌは“invoice 1001”問題の枩床になりたす。

モデルを耇雑にせずにテナントごずのカスタマむズをどうサポヌトしたすか

テナントごずにフィヌルドやワヌクフロヌが異なるなら、スキヌマ分離や別DBにするこずで䞀テナントの倉曎が他に圱響するリスクを䞋げられたす。ほずんどのテナントが䌌おいるならtenant_idベヌスの共有モデルにしお、機胜フラグやオプショナルフィヌルドで差分を扱うのが運甚面で楜です。重芁なのは共有ずテナント固有の所有暩を曖昧にしないこずです。

AppMasterのようなノヌコヌドバック゚ンドで安党にマルチテナンシヌを実装するには

早い段階でテナント境界線を蚭蚈し、認蚌埌にテナントコンテキストをどこに保存するか決め、読み曞き時に必ずそれを䜿うようにしおください。AppMasterでは通垞、Business Processロゞック内で認蚌枈みナヌザヌからtenant_idを蚭定しおからテナント所有レコヌドの䜜成・怜玢を行うこずで、゚ンドポむントがスコヌプを忘れないようにしたす。このパタヌンを党䜓で再利甚するこずが重芁です。

マルチテナントモデルを確定する前にどんなテストを実行すべきですか

2぀のテナントを䜜成しお類䌌デヌタを甚意し、レコヌドIDだけを倉えお読み取り・曎新・削陀できないか詊しお分離を砎れる箇所を芋぀けおください。バックグラりンドゞョブ、むンポヌト、゚クスポヌトが正しいテナントスコヌプに曞き蟌むこずも必ず確認したす。たた、実際のサンプルボリュヌムでテナント別レポヌトず管理者向けのグロヌバルレポヌトを実行しお性胜ずアクセスルヌルを怜蚌しおください。

始めやすい
䜕かを䜜成する 玠晎らしい

無料プランで AppMaster を詊しおみおください。
準備が敎ったら、適切なサブスクリプションを遞択できたす。

始める
ノヌコヌドバック゚ンド向けマルチテナントSaaSのデヌタモデル遞択 | AppMaster