如何在两个表之间建立一对多关系,但将数据存储在第三个表中?TypeORM



我有一个应用程序,有两种类型的用户,教师和学生,都存储在一个表中。学生可以是一个群体的一部分,因此他们将与群体处于多对一的关系中。这些是我的用户和组实体:

@Entity('users')
export class User {
@ApiProperty()
@PrimaryGeneratedColumn()
id: number;
@ApiProperty()
@Column()
username: string;
@ApiProperty()
@Exclude()
@Column()
password: string;
@ApiProperty()
@Column()
role: Role;
@ManyToOne(() => Group, (group) => group.students, { nullable: true })
group: Group;
}

@Entity('groups')
export class Group {
@ApiProperty()
@PrimaryGeneratedColumn()
id: number;
@ApiProperty()
@Column()
groupName: string;
@ApiProperty()
@Column()
year: string;

@ApiProperty({ type: () => [User] })
@OneToMany(() => User, (user) => user.group)
@JoinTable()
students: User[];
}

问题是,现在每个用户都有这个组列,但老师不需要它。是否可以以某种方式将第三个表设置为存储userId和groupId(就像在多对多关系的情况下一样(,以保持用户表中没有不必要的列?非常感谢。

为什么不使用多对多关系?

@Entity('users')
export class User {
@ApiProperty()
@PrimaryGeneratedColumn()
id: number;
@ApiProperty()
@Column()
username: string;
@ApiProperty()
@Exclude()
@Column()
password: string;
@ApiProperty()
@Column()
role: Role;
}
@Entity('groups')
export class Group {
@ApiProperty()
@PrimaryGeneratedColumn()
id: number;
@ApiProperty()
@Column()
groupName: string;
@ApiProperty()
@Column()
year: string;

@ApiProperty({ type: () => [User] })
@ManyToMany(() => User)
@JoinTable()
students: User[];
}

这将产生以下表格:

+-------------+--------------+----------------------------+
|                        users                            |
+-------------+--------------+----------------------------+
| id          | int(11)      | PRIMARY KEY AUTO_INCREMENT |
| username    | varchar(255) |                            |
| password    | varchar(25)  |                            |
| role        | enum         |                            |
+-------------+--------------+----------------------------+
+-------------+--------------+----------------------------+
|                        groups                           |
+-------------+--------------+----------------------------+
| id          | int(11)      | PRIMARY KEY AUTO_INCREMENT |
| groupName   | varchar(255) |                            |
| year        | varchar(4)   |                            |
+-------------+--------------+----------------------------+
+-------------+--------------+----------------------------+
|                  group_students_user                    |
+-------------+--------------+----------------------------+
| userId      | int(11)      | PRIMARY KEY FOREIGN KEY    |
| groupId     | int(11)      | PRIMARY KEY FOREIGN KEY    |
+-------------+--------------+----------------------------+

最新更新