对于这个例子,我有4个模式。Picture
,Video
和Game
可以有多个Download
。虽然它会对多个表造成混乱,但在从调用方搜索下载时可以正常工作(Picture
、Video
和Game
)。但是当我想从Download
端确定调用者时,问题出现了。我需要查找3个多对多表,然后提取我的数据。
typeorm中有什么东西可以减轻我的痛苦吗?或者说,这种设计多模式多对多的方式是不正确的吗?你们遇到过类似的问题吗?如果有,你们是如何解决的?
先谢了
@Entity()
export class Picture {
@PrimaryGeneratedColumn()
id: number
@Column()
name: string
@ManyToMany(() => Download)
@JoinTable()
downloads: Download[]
}
@Entity()
export class Video {
@PrimaryGeneratedColumn()
id: number
@Column()
name: string
@ManyToMany(() => Download)
@JoinTable()
downloads: Download[]
}
@Entity()
export class Game {
@PrimaryGeneratedColumn()
id: number
@Column()
name: string
@ManyToMany(() => Download)
@JoinTable()
downloads: Download[]
}
@Entity()
export class Download {
@PrimaryGeneratedColumn()
id: number
@Column()
source: string
@Column()
status: string
@Column()
path: string
}
1条答案
按热度按时间8wtpewkr1#
假设我们不能假设您正在使用的连接技术,因为模式描述没有为我们提供可以执行连接语句的相关字段(我看到您使用的是
source: string
,但其他模式使用的是int ID),那么在相关列上引入索引可能会加快SELECT语句的速度。我正在考虑围绕以下内容的一些东西投入用途:
现在,假设我们有这样的下载表结构:
如果Downloads表中的source_id和相邻表中的ID都被索引了,那么服务器的工作就会轻松得多;这样select语句的工作速度会更快:
现在,这也可能意味着相邻表的ID不重复,如果它们重复,您也可以引入一些变量,如
content_source_id int
,并做一个case when
.Total沙箱。Postgres的文档中也有一些关于索引的细节:https://www.postgresql.org/docs/current/sql-createindex.html