Sql 如何创建包含多个字段的唯一索引,其中一个字段是外键

Sql 如何创建包含多个字段的唯一索引,其中一个字段是外键,sql,node.js,typeorm,Sql,Node.js,Typeorm,我试图创建一个包含多个字段的索引,其中一个字段是另一个表的外键。但是,我得到以下错误: 错误:索引“player\u id\u UNIQUE”包含的列在 实体(收入):玩家id 鉴于玩家id是我加入的外键,我该如何处理 import { Column, Entity, Index, JoinColumn, ManyToOne, PrimaryColumn } from "typeorm"; import { PersonPlayer } from "./PersonPlayer"; import

我试图创建一个包含多个字段的索引,其中一个字段是另一个表的外键。但是,我得到以下错误:

错误:索引“player\u id\u UNIQUE”包含的列在 实体(收入):玩家id

鉴于玩家id是我加入的外键,我该如何处理

import { Column, Entity, Index, JoinColumn, ManyToOne, PrimaryColumn } from "typeorm";
import { PersonPlayer } from "./PersonPlayer";
import { Team } from "./Team";

    @Entity()
    @Index("player_id_UNIQUE", ["player_id", "period", "year"], { unique: true })
    export class Earning {

        @PrimaryColumn({length: 36})
        id: string;

        @Column({nullable: true})
        year: number;

        @Column({type: 'decimal', nullable: true})
        amount: number;

        @Column({nullable: true, length: 45})
        period: string;

        @ManyToOne(() => Team, {nullable: true})
        @JoinColumn({name: 'team_id'})
        team: Team;


        @ManyToOne(() => PersonPlayer, {nullable: true})
        @JoinColumn({name: 'player_id'})
        player: PersonPlayer;

        @Column({nullable: true, length: 45})
        dtype: string;

    }

当我生成这个实体并创建sql表(不带索引)时,我将
player\u id
作为列之一。但typeorm现在似乎无法通过joincolumn关系通过索引识别实体中存在的player_id。

这完全没有文档记录,所以我花了一些时间才找到正确的语法。实际上,您可以在索引定义中使用子特性:

@Index("player_id_UNIQUE", ["player.id", "period", "year"], { unique: true })
这样,
player.id
就会自动映射到结果SQL中的
player\u id

CREATE UNIQUE INDEX "player_id_UNIQUE" ON "user_earning" ("player_id", "period", "year")

你有没有设法弄明白这一点@Kay?我现在遇到了同样的问题,在官方文档中找不到答案。@VincentvanderWeele是的,我将
player:personPlayer
更改为
player\u id:personPlayer
。这对我们来说是可行的,因为我们的项目只是处理db迁移,虽然最好是使用player作为名称而不是player_id。但是因为我们没有使用orm的其余部分来创建任何我们不太想知道的业务逻辑,谢谢