You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在一个schema.prisma文件中导入另一个schema.prisma文件?

跨Prisma Schema文件引用模型的实现方式

首先明确核心限制:Prisma不支持在配置了不同数据源(即连接不同数据库实例)的独立Schema文件之间,建立数据库级别的外键关联,外键是数据库层面的约束规则,仅能在同一个数据库实例内生效。
根据你的实际使用场景,可选择对应方案:


方案1:同库场景拆分多Schema文件管理

如果你的Employee和Costs模型实际归属于同一个数据库,只是想拆分文件方便维护,不需要连接两个独立数据库,可直接使用Prisma的多文件Schema能力:

  • 保留1个入口schema.prisma文件,统一存放generator和datasource配置
  • 在同级目录新建专门存放模型的文件夹,将不同业务模型拆分到独立的.prisma文件中
  • 执行prisma generate时,Prisma会自动合并目录下所有Schema文件的模型定义,你可以像在单文件中一样正常使用@relation定义关联,示例:
// schemas/employee.prisma
model Employee {
  id             Int    @id @default(autoincrement())
  cost_center_id Int
  // 直接引用同项目下其他prisma文件定义的Costs模型
  cost_center    Costs  @relation(fields: [cost_center_id], references: [cod_center_cost])
  // 其余字段省略
}

这种方式生成的Prisma Client是统一的,可正常使用include、select等原生联表查询能力。


方案2:跨独立数据库场景做应用层关联

如果你确实需要连接两个独立的PostgreSQL数据库(即你当前配置了两个不同DATABASE_URL的场景),无法在数据库层面建外键,只能在业务代码层实现手动关联:

  • 保留两个独立的Schema配置,你当前已经为两个Client配置了不同的输出路径,分别执行生成命令即可得到两个独立的客户端:
    prisma generate --schema=./path/to/own-db-schema.prisma
    prisma generate --schema=./path/to/another-db-schema.prisma
    
  • 不要在Schema模型中写跨库的@relation注解,Prisma校验阶段会直接报错
  • 在业务代码中通过多次查询手动拼接关联数据,示例:
// 分别引入两个库生成的独立客户端
import { PrismaClient as OwnDbClient } from './generated/own_database';
import { PrismaClient as AnotherDbClient } from './generated/another_database';

const ownDb = new OwnDbClient();
const anotherDb = new AnotherDbClient();

async function getEmployeeWithCost(employeeId: number) {
  // 先查员工数据
  const employee = await ownDb.employee.findUnique({ where: { id: employeeId } });
  if (!employee) return null;
  // 拿员工表存储的成本中心ID,去另一个库查询对应成本中心数据
  const costInfo = await anotherDb.costs.findUnique({
    where: { cod_center_cost: employee.cost_center_id }
  });
  // 手动拼接关联结果返回
  return { ...employee, cost_center: costInfo };
}

注意:这种应用层关联无法使用Prisma原生联表查询、级联更新/删除等数据库层能力,所有关联逻辑需要自行实现,批量查询时需要注意做数据预加载避免N+1性能问题。


特殊场景说明

如果两个模型所属的库是同一个PostgreSQL实例下的不同逻辑Schema(同一个连接地址下的不同namespace),不需要拆分两个独立的datasource配置,只需要在datasource中配置schemas参数指定要访问的PG逻辑Schema,即可在同一个Prisma项目中跨PG逻辑Schema建立模型关联。

内容的提问来源于stack exchange,提问作者Ari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.10 16:15:47