【发布时间】:2021-02-03 19:19:25
【问题描述】:
假设我有一个教师实体和一个学生实体。他们都有电子邮件和密码,但老师和学生都有额外的列。那么,它会是不同的表吗?但在这种情况下,我会为每个人创建身份验证模块、控制器、jwt 策略和所有东西。如何让它们保持在同一张表中,但根据角色进行扩展?
附言澄清一下:
这是我的护照策略。我需要在这里使用teacherService。学生也一样。大量冗余代码。而且这不是唯一的情况。
@Injectable()
export class LocalStrategy extends PassportStrategy(Strategy) {
constructor(private authService: AuthService) {
super({
usernameField: 'email'
});
}
async validate(email: string, password: string): Promise<Teacher | Student> {
return this.authService.getAuthenticatedUser(email, password);
}
}
【问题讨论】:
-
为什么不创建一个用户实体,然后让教师和学生实体通过外键链接到单个用户实体?我认为那会更接近 BCNF。
-
@SumnerEvans,我想过这个,它会非常好,但我不知道如何动态链接到特定的表。好的,我有 BaseUser 实体,其中包含电子邮件、密码、角色和另一个表的外键,其中包含其余列。但我不只有一个实体。我至少有两个:学生和老师。如何根据角色将用户链接到特定表(学生或教师)?