抱歉我的英语不好
@Entity()
export class Account {
@PrimaryGeneratedColumn()
id: number;
@Column({ unique: true })
accountNumber: number;
@Column({ type: 'double precision' })
balance: number;
@OneToOne(() => Currency)
@JoinColumn({ name: 'currency_signature' })
currency: Currency;
@OneToOne(() => User, { nullable: false })
@JoinColumn()
user: User;
}
我的 postgres 数据库中有这个实体/表(我使用 typeorm),
if (!user) throw new BadRequestException('There is no user with that id');
const account = await this.accountRepository.create({
...createAccountDto,
user,
currency: { currency_signature: 'USC' },
});
我有这个创建查询
我的问题是,我需要先检查货币表数据是否存在吗?或者只是让帐户表使用外键约束来处理它,因为帐户表知道我插入的数据是否在货币表中,或者不是来自外键约束?
从我的角度来看,我认为我不需要首先进行查找查询来检查货币签名是否存在,因为如果我进行查找查询来检查货币是否存在,帐户表已经使用foreign_key约束为我检查了它,它只是另一个查询,只是向数据库添加额外的作业?
大家觉得怎么样?
插入账户前无需检查货币是否存在;
Account
表中的外键约束将为您强制执行。添加单独的检查只会创建不必要的数据库查询。只需处理插入操作期间因外键约束而产生的任何潜在错误。
try {
const account = await this.accountRepository.save({
...createAccountDto,
user,
currency: { currency_signature: 'USC' },
});
} catch (error) {
if (error.code === '23503') { // Postgres foreign key violation error code
throw new BadRequestException('Invalid currency');
}
throw error;
}