Я запутался при создании дизайна базы данных для своего приложения. Я использую MySql как базу данных, а также как пружину и спящий режим.
Мое требование: у меня есть таблица пользователей с ролями admin / user и таблица устройств. В таблице устройств у меня есть столбец с именем createdBy
, который указывает userId
, кто добавил устройство. Пользователь может обновлять статус устройства, поэтому каждый раз, когда значение или статус устройства изменяется, мне нужно регистрировать это. Я использую отдельную таблицу под названием DeviceHistory
для регистрации этого.
Я застрял в реализации этого в спящем режиме.
- следует ли использовать userId в качестве поля int в таблице устройств и таблице device_history?
- следует ли использовать
OneToOne
сопоставление идентификатора пользователя в таблице устройств и таблице deviceHistory - следует ли использовать
OneToMany
сопоставление для таблицы устройства и истории устройства и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;
}