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