我有 2 个表项目和员工有多个关系。项目有很多员工,员工可以加入很多项目(多对多)。项目有一个员工是团队领导,一个员工可以管理多个项目(多对一)。那么我如何设计数据库,以及类模型与数据库的映射。有人帮助我这是我的代码
类用户
@Entity(name = "USERS")
public class Users {
@Id
@Column(name = "USER_ID", length = 6)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer userId;
@Column(name = "USER_NAME", length = 50, nullable = false)
private String userName;
@Column(name = "PASS_WORD", length = 50, nullable = false)
private String passWord;
@Column(name = "FULL_NAME", length = 50, nullable = false)
private String fullName;
@Column(name = "EMAIL", length = 50, nullable = false)
private String email;
@Column(name = "PHONE", length = 11, nullable = true)
private String phone;
@Column(name = "STATUS", nullable = true)
private Boolean status;
@ManyToMany(fetch = FetchType.LAZY)
@JsonIgnore
@JoinTable(name = "USERPROJECT", joinColumns = { @JoinColumn(name =
"USER_ID") }, inverseJoinColumns = {
@JoinColumn(name = "PROJECT_ID") })
private List<Project> projects;
@OneToMany(mappedBy = "teamlead")
private List<Project> projectOfTeamLead;
//get set.....
}
类项目
@Entity(name = "PROJECTS")
public class Project {
@Id
@Column(name = "PROJECT_ID", length = 6)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer projectId;
@Column(name = "PROJECT_NAME", length = 50, nullable=false)
private String projectName;
@Column(name = "USER_CREATE_ID", length = 6, nullable=false)
private Integer userCreateId;
// @Column(name = "TEAM_LEAD_ID", length = 6, nullable=false)
// private Integer teamLeadId;
@Column(name = "TIME_START", nullable=true)
private Date timeStart;
@Column(name = "TIME_END", nullable=true)
private Date timeEnd;
@ManyToMany(mappedBy = "projects")
private List<Users> users;
@ManyToOne
@JoinColumn(name = "TEAM_LEAD_ID")
private Users teamlead;
//get set...
}
我认为你需要让你的数据库适合3nf(第三范式)。您正在描述一个使用两个表的数据库,但我认为您至少需要三个表,这样您就可以描述哪些员工在哪个项目中。应使用使用其他两个表中的 PK 的"团队"表。按照惯例,您可以将其命名为"项目员工",因为它分别由"项目"表和"员工"表中的PK组成。我希望这能回答你的问题。如果你不明白我在说什么,我强烈建议你看这个。