【发布时间】:2021-12-07 17:39:58
【问题描述】:
我正在使用 psql 数据库尝试 Prisma,但我在数据建模方面并不擅长 ^^
我正在尝试将此 typescript 界面(简化)转换为 psql 数据库的 prisma 模型
export enum StarterEnum {
MANUAL,
ELECTRIC,
DUAL,
}
interface StarterEngine {
name: StarterEnum;
weight: number;
}
interface PowerEngine {
hp: number;
rpm: number;
}
export interface Engine {
id: string;
brand: string;
model: string;
power?: PowerEngine;
starter?: StarterEngine[];
}
StarterEngine 和 PowerEngine 仅特定于一个引擎,关系表对于该引擎是必需的,或者有一种解决方案可以将所有引擎都保存在一个表中?
这是我的实际模型(但有两个表),power_hp 和 power_rpm 需要链接(如果至少填写一个,则必须链接)
enum StarterEnum {
MANUAL
ELECTRIC
DUAL
}
model Starter {
id String @id @default(cuid())
name StarterEnum
weight Float
Engine Engine? @relation(fields: [engineId], references: [id])
engineId String?
}
model Engine {
id String @id @default(cuid())
brand String
model String
power_hp Float
power_rpm Float
Starter Starter[]
}
谢谢大家
【问题讨论】:
-
您是在说“所有在一个表中”,但每个引擎都可以有一个启动引擎列表?如果它是一对多的关系(每个引擎都有多个启动器),那么将它们放在单独的表中不是很好吗? (我对棱镜了解不多,所以这可能只是误解了这个问题)
-
是的,每个引擎都可以有多个启动器,但是一个启动器仅适用于一个引擎,我只是想知道是否可以将其存储在关系表的一个表中是强制性的
-
我不认为 typescript 有区分 one->many vs many->many 的概念,因为这意味着存储数据而不是正确输入数据,所以如果你是尝试在打字稿中编码这种“多个引擎不应引用启动引擎”逻辑,您将找不到任何成功。
标签: typescript postgresql prisma