如何在 typeorm、postgres 中组合 3 列唯一的?
Posted
技术标签:
【中文标题】如何在 typeorm、postgres 中组合 3 列唯一的?【英文标题】:How do I make combination of 3 columns in typeorm, postgres unique? 【发布时间】:2021-07-15 17:35:15 【问题描述】:如何实现 db 中没有 2 条相同的记录,而这 3 列的值组合起来是相同的?
@Column()
sector: string;
@Column()
row: string;
@Column()
number: string;
【问题讨论】:
【参考方案1】:更新答案:
虽然创建一个独特的 @Index
像 @Johannes 建议的那样适合您,但从语义上讲,更好的解决方案是创建一个 composite unique key。
@Unique(["sector", "row", "number"])
基于https://***.com/a/23665806/4343332,Postgres 似乎在内部以相同的方式处理唯一索引和唯一约束。
因此,选择其中任何一个都不会带来性能优势。
感谢您的见解@Johannes H. ?
【讨论】:
大多数 DBMS 也会为唯一约束创建索引结构。不知何故,他们需要确定一个值是否已经存在,而这只有在某种索引存在的情况下才能有效地完成(否则就需要扫描整个表)。对于 PostgreSQL,还请参阅此答案:***.com/questions/23542794/…. 哇。不知道那件事。谢谢! 当然可以。但是,总的来说,您的答案是绝对正确的。使用索引的 Postgres 是一个实现细节。应该始终使用语义上更合适的方式,在这种情况下,我同意你的看法,这将是一个约束,而不是一个索引。【参考方案2】:您可以使用@Index 注释实体,如documentation about "Indices with multiple columns" 中所述:
@Index(["sector", "row", "number"], unique: true )
【讨论】:
以上是关于如何在 typeorm、postgres 中组合 3 列唯一的?的主要内容,如果未能解决你的问题,请参考以下文章
我如何将 Postgres DateRange 类型与 TypeOrm 一起使用
如何使用 TypeORM 为 postgres 数据库和 nodejs 使用参数化查询作为应用程序的后端服务器
使用 typeorm 在 postgres 中搜索数组中的项目
如何以正确的方式将@admin-bro/nestjs 与@admin-bro/typeorm 和postgres 一起使用?