{"catalogRevision":"cat_f13ab9a494120b5e","nodeId":"pattern:multi-tenant-relational-data","label":"Multi-tenant relational data","facet":"pattern","nodeType":"atom","canonicalPath":"/discover/pattern/multi-tenant-relational-data","breadcrumbs":[{"id":"discovery","label":"Agent hosting discovery","canonicalPath":"/discover/discovery","kind":"root"},{"id":"pattern","label":"Architecture and data patterns","canonicalPath":"/discover/pattern","kind":"facet"},{"id":"pattern:postgres-patterns","label":"Postgres patterns","canonicalPath":"/discover/pattern/postgres-patterns","kind":"group"},{"id":"pattern:multi-tenant-relational-data","label":"Multi-tenant relational data","canonicalPath":"/discover/pattern/multi-tenant-relational-data","kind":"atom"}],"parents":{"items":[{"id":"pattern:postgres-patterns","label":"Postgres patterns","canonicalPath":"/discover/pattern/postgres-patterns","kind":"group"}],"total":1,"offset":0,"limit":100},"children":{"items":[],"total":0,"offset":0,"limit":50},"recipes":{"items":[{"id":"page:recipes:client-portal:next-js:tenant-workspaces","label":"Host client portal with Next.js: tenant-scoped workspaces","canonicalPath":"/recipes/client-portal/next-js/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:client-portal:nuxt:tenant-workspaces","label":"Host client portal with Nuxt: tenant-scoped workspaces","canonicalPath":"/recipes/client-portal/nuxt/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:client-portal:sveltekit:tenant-workspaces","label":"Host client portal with SvelteKit: tenant-scoped workspaces","canonicalPath":"/recipes/client-portal/sveltekit/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:client-portal:django:tenant-workspaces","label":"Host client portal with Django: tenant-scoped workspaces","canonicalPath":"/recipes/client-portal/django/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:client-portal:laravel:tenant-workspaces","label":"Host client portal with Laravel: tenant-scoped workspaces","canonicalPath":"/recipes/client-portal/laravel/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:client-portal:rails:tenant-workspaces","label":"Host client portal with Rails: tenant-scoped workspaces","canonicalPath":"/recipes/client-portal/rails/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:client-portal:phoenix:tenant-workspaces","label":"Host client portal with Phoenix: tenant-scoped workspaces","canonicalPath":"/recipes/client-portal/phoenix/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:client-portal:asp-net-core:tenant-workspaces","label":"Host client portal with ASP.NET Core: tenant-scoped workspaces","canonicalPath":"/recipes/client-portal/asp-net-core/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:client-portal:spring-boot:tenant-workspaces","label":"Host client portal with Spring Boot: tenant-scoped workspaces","canonicalPath":"/recipes/client-portal/spring-boot/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:client-portal:flask:tenant-workspaces","label":"Host client portal with Flask: tenant-scoped workspaces","canonicalPath":"/recipes/client-portal/flask/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:partner-portal:next-js:tenant-workspaces","label":"Host partner portal with Next.js: tenant-scoped workspaces","canonicalPath":"/recipes/partner-portal/next-js/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:partner-portal:nuxt:tenant-workspaces","label":"Host partner portal with Nuxt: tenant-scoped workspaces","canonicalPath":"/recipes/partner-portal/nuxt/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:partner-portal:sveltekit:tenant-workspaces","label":"Host partner portal with SvelteKit: tenant-scoped workspaces","canonicalPath":"/recipes/partner-portal/sveltekit/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:partner-portal:django:tenant-workspaces","label":"Host partner portal with Django: tenant-scoped workspaces","canonicalPath":"/recipes/partner-portal/django/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:partner-portal:laravel:tenant-workspaces","label":"Host partner portal with Laravel: tenant-scoped workspaces","canonicalPath":"/recipes/partner-portal/laravel/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:partner-portal:rails:tenant-workspaces","label":"Host partner portal with Rails: tenant-scoped workspaces","canonicalPath":"/recipes/partner-portal/rails/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:partner-portal:phoenix:tenant-workspaces","label":"Host partner portal with Phoenix: tenant-scoped workspaces","canonicalPath":"/recipes/partner-portal/phoenix/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:partner-portal:asp-net-core:tenant-workspaces","label":"Host partner portal with ASP.NET Core: tenant-scoped workspaces","canonicalPath":"/recipes/partner-portal/asp-net-core/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:partner-portal:spring-boot:tenant-workspaces","label":"Host partner portal with Spring Boot: tenant-scoped workspaces","canonicalPath":"/recipes/partner-portal/spring-boot/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:partner-portal:flask:tenant-workspaces","label":"Host partner portal with Flask: tenant-scoped workspaces","canonicalPath":"/recipes/partner-portal/flask/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:vendor-portal:next-js:tenant-workspaces","label":"Host vendor portal with Next.js: tenant-scoped workspaces","canonicalPath":"/recipes/vendor-portal/next-js/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:vendor-portal:nuxt:tenant-workspaces","label":"Host vendor portal with Nuxt: tenant-scoped workspaces","canonicalPath":"/recipes/vendor-portal/nuxt/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:vendor-portal:sveltekit:tenant-workspaces","label":"Host vendor portal with SvelteKit: tenant-scoped workspaces","canonicalPath":"/recipes/vendor-portal/sveltekit/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:vendor-portal:django:tenant-workspaces","label":"Host vendor portal with Django: tenant-scoped workspaces","canonicalPath":"/recipes/vendor-portal/django/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:vendor-portal:laravel:tenant-workspaces","label":"Host vendor portal with Laravel: tenant-scoped workspaces","canonicalPath":"/recipes/vendor-portal/laravel/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:vendor-portal:rails:tenant-workspaces","label":"Host vendor portal with Rails: tenant-scoped workspaces","canonicalPath":"/recipes/vendor-portal/rails/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:vendor-portal:phoenix:tenant-workspaces","label":"Host vendor portal with Phoenix: tenant-scoped workspaces","canonicalPath":"/recipes/vendor-portal/phoenix/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:vendor-portal:asp-net-core:tenant-workspaces","label":"Host vendor portal with ASP.NET Core: tenant-scoped workspaces","canonicalPath":"/recipes/vendor-portal/asp-net-core/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:vendor-portal:spring-boot:tenant-workspaces","label":"Host vendor portal with Spring Boot: tenant-scoped workspaces","canonicalPath":"/recipes/vendor-portal/spring-boot/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:vendor-portal:flask:tenant-workspaces","label":"Host vendor portal with Flask: tenant-scoped workspaces","canonicalPath":"/recipes/vendor-portal/flask/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:member-portal:next-js:tenant-workspaces","label":"Host member portal with Next.js: tenant-scoped workspaces","canonicalPath":"/recipes/member-portal/next-js/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:member-portal:nuxt:tenant-workspaces","label":"Host member portal with Nuxt: tenant-scoped workspaces","canonicalPath":"/recipes/member-portal/nuxt/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:member-portal:sveltekit:tenant-workspaces","label":"Host member portal with SvelteKit: tenant-scoped workspaces","canonicalPath":"/recipes/member-portal/sveltekit/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:member-portal:django:tenant-workspaces","label":"Host member portal with Django: tenant-scoped workspaces","canonicalPath":"/recipes/member-portal/django/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:member-portal:laravel:tenant-workspaces","label":"Host member portal with Laravel: tenant-scoped workspaces","canonicalPath":"/recipes/member-portal/laravel/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:member-portal:rails:tenant-workspaces","label":"Host member portal with Rails: tenant-scoped workspaces","canonicalPath":"/recipes/member-portal/rails/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:member-portal:phoenix:tenant-workspaces","label":"Host member portal with Phoenix: tenant-scoped workspaces","canonicalPath":"/recipes/member-portal/phoenix/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:member-portal:asp-net-core:tenant-workspaces","label":"Host member portal with ASP.NET Core: tenant-scoped workspaces","canonicalPath":"/recipes/member-portal/asp-net-core/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:member-portal:spring-boot:tenant-workspaces","label":"Host member portal with Spring Boot: tenant-scoped workspaces","canonicalPath":"/recipes/member-portal/spring-boot/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:member-portal:flask:tenant-workspaces","label":"Host member portal with Flask: tenant-scoped workspaces","canonicalPath":"/recipes/member-portal/flask/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:community-forum:next-js:tenant-workspaces","label":"Host community forum with Next.js: tenant-scoped workspaces","canonicalPath":"/recipes/community-forum/next-js/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:community-forum:nuxt:tenant-workspaces","label":"Host community forum with Nuxt: tenant-scoped workspaces","canonicalPath":"/recipes/community-forum/nuxt/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:community-forum:sveltekit:tenant-workspaces","label":"Host community forum with SvelteKit: tenant-scoped workspaces","canonicalPath":"/recipes/community-forum/sveltekit/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:community-forum:django:tenant-workspaces","label":"Host community forum with Django: tenant-scoped workspaces","canonicalPath":"/recipes/community-forum/django/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:community-forum:laravel:tenant-workspaces","label":"Host community forum with Laravel: tenant-scoped workspaces","canonicalPath":"/recipes/community-forum/laravel/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:community-forum:rails:tenant-workspaces","label":"Host community forum with Rails: tenant-scoped workspaces","canonicalPath":"/recipes/community-forum/rails/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:community-forum:phoenix:tenant-workspaces","label":"Host community forum with Phoenix: tenant-scoped workspaces","canonicalPath":"/recipes/community-forum/phoenix/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:community-forum:asp-net-core:tenant-workspaces","label":"Host community forum with ASP.NET Core: tenant-scoped workspaces","canonicalPath":"/recipes/community-forum/asp-net-core/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:community-forum:spring-boot:tenant-workspaces","label":"Host community forum with Spring Boot: tenant-scoped workspaces","canonicalPath":"/recipes/community-forum/spring-boot/tenant-workspaces","kind":"recipe"},{"id":"page:recipes:community-forum:flask:tenant-workspaces","label":"Host community forum with Flask: tenant-scoped workspaces","canonicalPath":"/recipes/community-forum/flask/tenant-workspaces","kind":"recipe"}],"total":68,"offset":0,"limit":50},"related":[],"requiredBy":{"items":[],"total":0,"offset":0,"limit":50},"publishedRecipeCount":68,"scopeNote":"Architecture pattern to validate. Application code or external services may be needed; not a claimed managed feature.","nextActions":[{"actionId":"browse-catalog","label":"Browse the catalog index","operationId":"catalog_index","method":"GET","relativePath":"/v1/catalog","origin":"api","parameters":{},"requiresAuthentication":false,"requiresApproval":false},{"actionId":"search-recipes","label":"Search published recipes by intent, stack and constraints","operationId":"search_recipes","method":"POST","relativePath":"/v1/catalog/search","origin":"api","parameters":{"body":{"limit":5,"query":"Multi-tenant relational data"}},"requiresAuthentication":false,"requiresApproval":false},{"actionId":"inspect:page:recipes:client-portal:next-js:tenant-workspaces","label":"Inspect the full recipe contract","operationId":"inspect_recipe","method":"GET","relativePath":"/v1/catalog/recipes/page%3Arecipes%3Aclient-portal%3Anext-js%3Atenant-workspaces","origin":"api","parameters":{"recipeId":"page:recipes:client-portal:next-js:tenant-workspaces"},"requiresAuthentication":false,"requiresApproval":false},{"actionId":"inspect:page:recipes:client-portal:nuxt:tenant-workspaces","label":"Inspect the full recipe contract","operationId":"inspect_recipe","method":"GET","relativePath":"/v1/catalog/recipes/page%3Arecipes%3Aclient-portal%3Anuxt%3Atenant-workspaces","origin":"api","parameters":{"recipeId":"page:recipes:client-portal:nuxt:tenant-workspaces"},"requiresAuthentication":false,"requiresApproval":false},{"actionId":"inspect:page:recipes:client-portal:sveltekit:tenant-workspaces","label":"Inspect the full recipe contract","operationId":"inspect_recipe","method":"GET","relativePath":"/v1/catalog/recipes/page%3Arecipes%3Aclient-portal%3Asveltekit%3Atenant-workspaces","origin":"api","parameters":{"recipeId":"page:recipes:client-portal:sveltekit:tenant-workspaces"},"requiresAuthentication":false,"requiresApproval":false},{"actionId":"inspect:page:recipes:client-portal:django:tenant-workspaces","label":"Inspect the full recipe contract","operationId":"inspect_recipe","method":"GET","relativePath":"/v1/catalog/recipes/page%3Arecipes%3Aclient-portal%3Adjango%3Atenant-workspaces","origin":"api","parameters":{"recipeId":"page:recipes:client-portal:django:tenant-workspaces"},"requiresAuthentication":false,"requiresApproval":false},{"actionId":"inspect:page:recipes:client-portal:laravel:tenant-workspaces","label":"Inspect the full recipe contract","operationId":"inspect_recipe","method":"GET","relativePath":"/v1/catalog/recipes/page%3Arecipes%3Aclient-portal%3Alaravel%3Atenant-workspaces","origin":"api","parameters":{"recipeId":"page:recipes:client-portal:laravel:tenant-workspaces"},"requiresAuthentication":false,"requiresApproval":false}]}