0

내 응용 프로그램에 대한 데이터베이스 디자인을 만드는 데 혼란 스럽습니다. 나는 데이터베이스와 스프링으로 최대 절전 모드로 MySQL을 사용하고있다.MySQL 및 최대 절전 모드에서 사용자에 대한 로그 또는 기록 테이블을 갖는 방법

내 요구 사항 : 역할이 admin/user 인 사용자 테이블이 있고 장치 테이블이 있습니다. 장치 테이블에는 장치를 추가 한 userIdcreatedBy이라는 열이 있습니다. 사용자는 장치 상태를 업데이트 할 수 있으므로 장치 값이나 상태가 변경 될 때마다이 값을 기록해야합니다. 나는 이것을 기록하기 위해 DeviceHistory이라는 별개의 테이블을 사용하고 있습니다.

최대 절전 모드에서이 기능을 구현하지 않았습니다.

  • device 테이블과 device_history 테이블의 int 필드로 userId를 사용해야합니까?
  • 제가
  • 난 장치 devicehistory 테이블과 사용자 테이블 장치로부터 OneToOne 매핑 OneToMany 매핑을 사용한다 디바이스 테이블 deviceHistory 테이블 userid에 O를 OneToOne 매핑을 사용한다. 이러한 시나리오가 어떤 샘플 코드는

사용자 테이블이 경우 링크를 공유하십시오 - 사용자 세부 사항을 포함

@Entity 
@Table(name = "user") 
public class User { 

    @Id 
     @GeneratedValue(strategy=GenerationType.AUTO) 
     @Column(name="id", unique = true, nullable = false) 
    @Column(name="user_id") 
    private int userId; 

    @Column(name="name") 
    @Nonnull 
    private String name; 

    @Column(name="password") 
    @Nonnull 
    private String password; 

    @Column(name="role") 
    private String role; 

    @Column(name="creation_date", columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable=false, updatable=false) 
    @Generated(GenerationTime.INSERT) 
    @Temporal(TemporalType.TIMESTAMP) 
    @Nonnull 
    private Date creationDate; 

    @Column(name="approved_date") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date approvedDate; 

    @Column(name="approved_by") 
    private int approvedBy; 

} 

장치 테이블 : 여기에 역사 : 장치 세부 사항을

@Entity 
@Table(name = "device") 
public class Device { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="id", unique = true, nullable = false) 
    @Column(name="device_id") 
    private String deviceId; 

    @Column(unique=true, name="serial_number") 
    @Nonnull 
    private String serialNumber; 

    @Column(name="creation_date") 
    @Generated(GenerationTime.INSERT) 
    @Temporal(TemporalType.TIMESTAMP) 
    @Nonnull 
    private Date creationDate; 

    @Column(name="created_by") 
    private int createdBy; 

} 

DeviceHistory 테이블을 포함 어떤 사용자가 장치 상태를 업데이트했는지 그리고 저장시기는 언제입니까?

@Entity 
@Table(name = "device_history") 
public class DeviceHistory { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="id", unique = true, nullable = false) 
    private int id; 

    @Column(name="device_id") 
    @Nonnull 
    private String deviceId; 

    @Column(name="notes") 
    private String notes; 

    @Column(name="last_modified_date") 
    @Generated(GenerationTime.INSERT) 
    @Temporal(TemporalType.TIMESTAMP) 
    @Nonnull 
    private Date lastModifiedDate; 

    @Column(name="last_modified_by") 
    private int lastModifiedBy; 
} 
+2

질문 텍스트가 아닌 코드 서식 지정에만 코드 블록을 사용하십시오. –

답변

1

사용자 용 장치에서 ManyToOne 매핑을 사용해야합니다. 마찬가지로 DeviceHistory에서 DeviceId 및 lastModifiedBy에 대한 ManyToOne 매핑을 사용해야합니다.

장치와 DeviceHistory 실체가 있어야한다 : 사용자가 만든 모든 장치를 얻으려면

@Entity 
@Table(name = "device") 
public class Device { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="device_id", unique = true, nullable = false) 
    private String deviceId; 

    @Column(unique=true, name="serial_number") 
    @Nonnull 
    private String serialNumber; 

    @Column(name="creation_date") 
    @Generated(GenerationTime.INSERT) 
    @Temporal(TemporalType.TIMESTAMP) 
    @Nonnull 
    private Date creationDate; 

    @ManyToOne(optional = false) 
    @JoinColumn(name="created_by") 
    private User createdBy; 

} 

@Entity 
@Table(name = "device_history") 
public class DeviceHistory { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="id", unique = true, nullable = false) 
    private int id; 

    @ManyToOne(optional = false) 
    @JoinColumn(name="device_id") 
    private Device deviceId; 

    @Column(name="notes") 
    private String notes; 

    @Column(name="last_modified_date") 
    @Generated(GenerationTime.INSERT) 
    @Temporal(TemporalType.TIMESTAMP) 
    @Nonnull 
    private Date lastModifiedDate; 

    @ManyToOne(optional = false) 
    @JoinColumn(name="last_modified_by") 
    private User lastModifiedBy; 
} 

당신은 사용자 및 장치에 대한 양방향 OneToMany 맵핑을 고려할 수 있습니다. 이를 위해 사용자 엔티티의 장치에 OneToMany 주석을 사용해야합니다.

+0

고맙습니다. @raza. 그것은 매력처럼 작동 – Madhu

+0

답변을 수락 고려하십시오 .. –