Thiết kế database có nhiều mối quan hệ giữa 2 bảng

mình hơi băn khoăn khi thiết kế database mà giữa 2 bảng có nhiều mối quan hệ
Ví dụ như 2 bảng employee và project. có quan hệ nhiều nhiều 1 project có nhiều employee, 1 employee có thể làm cho nhiều project( trường hợp này thì dùng bảng phụ), quan hệ 1 nhiều, 1 employee có thể là team leader của nhiều dự án, 1 dự án có một team leader. cái quan hệ 1 nhiều này thì nên làm như thế nào cho hợp lý ạ, và nên thiết kế các class model như thế nào để thể hiện đúng các mối quan hệ này.
class user

@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.....
 }

class project

@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...
}

Quan hệ 1 nhiều thì thằng “1” là 1 cột trong bảng của thằng “nhiều”

vấn đề là có 2 quan hệ mà cái thằng team lead cũng nằm trong list employee. Mình đã edit lại câu hỏi phía trên, bạn xem thử rồi cho ý kiến nhé

Mình không làm với Hibernate bao giờ, nhưng thiết kế SQL db cho bạn thì mình sẽ có một trường là LEADER_ID trong bảng PROJECT. Mà chẳng phải code của bạn cũng như vậy rồi sao?

design như vậy chỉ là hot fix thôi ông ơi. Vấn đề nằm ở chỗ thằng leader ấy nó cũng nằm trong cái list user kia rồi. nếu design database thì mình hiểu, trong bảng phụ cho thêm cột role nữa là ok. Nhưng vấn đề là hibernate lại ko hỗ trợ cái đấy, trong bảng phụ chỉ có thể có 2 trường là 2 primary key của 2 bảng kia thôi, Vấn đề nằm ở chỗ thiết kế class sao cho mapping được với database ấy. Nếu để như của mình ở trên kia thì rõ ràng là sai về logic :((

This topic was automatically closed after 730 days. New replies are no longer allowed.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?