如何对一对多关系进行唯一约束?

Amb*_*ier 2 database postgresql orm typeorm nestjs

我有两个实体:projectactor

export abstract class BaseEntityModel {
  @PrimaryGeneratedColumn()
  id: number;
}

@Entity()
export class Project extends BaseEntityModel {
    @Column()
    title: string;

    @OneToMany(type => Actor, actor => actor.project)
    @JoinColumn()
    actors: Actor[];
}

@Entity()
export class Actor extends BaseEntityModel {
    @Column({unique: true}) 
    title: string;

    @ManyToOne(type => Project, project => project.actors)
    project: Project;
}
Run Code Online (Sandbox Code Playgroud)

我想要每个项目唯一的演员头衔,但不是跨数据库。

好的

projects: [
  {
    title: "webapp",
    actors: [
      {
        title: "dev"
      }
    ]
  },
  {
    title: "json-parser",
    actors: [
      {
        title: "dev"
      },
      {
        title: "target"
      }
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

不好

projects: [
  {
    title: "webapp",
    actors: [
      {
        title: "dev"
      },
      {
        title: "dev"
      }
    ]
  },
  {
    title: "json-parser",
    actors: [
      {
        title: "dev"
      },
      {
        title: "target"
      }
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

@Column({unique: true})在桌子上作为唯一的工作,这不是我想要的。还有 class 装饰器@Unique(['title']),但它似乎也在做同样的事情。

我可以使用 TypeORM 中的某些东西,或者我是否必须检查自己是否actor.title已经存在于项目中。避免actor.title在同一个项目中重复使用。同时保持在actor.title整个数据库中具有多个时间相同的可能性?

请注意,Actor实体不应共享projects(没有多对多关系)。

Amb*_*ier 5

添加@Unique(['title', 'project'])类装饰器Actor似乎是我正在寻找的,请注意我以某种方式“损坏”了我的数据库,并且只有在删除/创建它之后迁移才能正常工作。