背景:I正在开发一个web应用程序,它允许教师用许多分析功能来测试他们的学生在测试/测验中的个人/班级表现。目前,我正在重新设计MySQL DB模式,您可以看到我到目前为止构建的基本EEF图,包括:

实际上,我正在使用Hibernate创建从后端到DB的连接,但是这个EEF图在显示表之间的关系方面做得很好。
The Problem I目前为管理员、学生和教师提供了单独的表,因为这三个表都有独特的字段,尽管目前它们的字段非常相似。有三个不同的表的问题是,我希望教师和学生共享一些功能。例如,教师应该能够像学生一样进行测验(为了测试目的)。我的第一反应是做一个学生和老师都扩展的用户类:
public class User{
...
}
@Entity
@Table(name="student")
public class Student extends User{
...
}
@Entity
@Table(name="teacher")
public class Teacher extends User{
...
}这种方法完成了我想做的小测验服务:
public QuizInstance takeQuiz(User u, QuizStructure struct){
...
}但是,当涉及多态性时,我不确定如何创建映射关系。这个问题的一个很好的例子是registerUser服务:
public void registerUser(User u, String password) {
if(u instanceof Teacher) {
//register User into Teacher Table..
}else if(u instanceof Student) {
//register User into Student Table...
}
new LoginService().createLogin(u, password);
}
public class LoginService{
...
public void createLogin(User u, String password){
Login l = new Login();
l.setEncrPass(encrypt(password));
l.setEmail(u.getEmail());
if(u instanceof Teacher)
l.setRole("teacher");
else
l.setRole("student");
l.setUser(u);
//Save Login into Login Table in DB
}
}
@Entity
@Table(name="login")
public class Login {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="user_id", unique=true, nullable=false)
private int id;
@Column(name="email", nullable=false)
private String email;
@Column(name="encrypted_pass", nullable=false)
private String encryptedPass;
@Column(name="role", nullable=false)
private String role;
//How do I map User if it can link to either the Teacher table or the Student Table???
private User user;
}我怀疑这是否解决问题的最佳办法。我不禁想到,我的DB Schema的设计是一个问题,安全性和结构方面的问题。有人能告诉我,我构建的DB体系结构是否做工差,如果是的话,可以分享一些示例/资源,以便更好地说明DBs的更安全的体系结构。
发布于 2019-10-15 09:22:39
以下是一些建议,
https://stackoverflow.com/questions/58387386
复制相似问题