【发布时间】:2018-11-09 18:28:37
【问题描述】:
我正在开发展示库的测试项目。就我的开发而言,我不断地遇到问题。
你能帮我做一个吗?
我的模型设计包括 User 和 LeasingHistory 实体,所以当用户借书时,LeasingHistory 表会填入相应的记录。
create table USER
(
ID BIGINT not null serial primary key,
ADDRESS VARCHAR(255) not null,
DOCUMENT_ID VARCHAR(255) not null,
FIRST_NAME VARCHAR(255) not null,
SUR_NAME VARCHAR(255) not null
);
create table LEASING_HISTORY
(
ID BIGINT not null serial primary key,
BOOK_INSTANCE_ID BIGINT not null,
USER_ID BIGINT not null,
START_DATE DATE(10),
ARRANGED_END_DATE DATE(10),
ACTUAL_END_DATE DATE(10),
foreign key (BOOK_INSTANCE_ID) references BOOK_INSTANCE,
foreign key (USER_ID) references USER
);
现在我必须实现用户删除。我该怎么做?它是如何在 Google、Facebook 或 StackOverFlow 中实现的?
我认为在这种情况下删除孤儿是不合适的策略,因为不应该清理历史记录。
我想我可以将 isActive 字段添加到 User 表中。在这种情况下,当用户按下“删除帐户”按钮时,我可以清除个人信息并分配isActive = false。
你怎么看?
更新:
我认为用户应该有可能恢复他的帐户,因此在这种情况下@killjoy 选项更好。你能检查我,我理解正确吗?我引入了额外的表UserInternalData,如果删除用户,我将清除User实体中的所有数据(除了id)并将isDeleted设置为true,dateStamp设置为'UserInternalData'中的当前日期
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@NoArgsConstructor
@AllArgsConstructor
@Getter
@EqualsAndHashCode
@ToString
class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String firstName;
private String surName;
@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate dateOfBirth;
}
@Entity
@NoArgsConstructor
@Getter
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public final class User extends Person {
@Builder
public User(Long id, String firstName, String surName, LocalDate dateOfBirth, String documentId, String address) {
super(id, firstName, surName, dateOfBirth);
this.documentId = documentId;
this.address = address;
}
private String documentId;
private String address;
}
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@EqualsAndHashCode
@ToString
public final class UserInternalData {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne
private User user;
boolean isDeleted;
@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate dateStamp;
}
我说的对吗?
【问题讨论】:
-
根据法律,您可能需要实际删除数据。了解 GDPR。
-
我可以将所有包含个人信息的列设置为空,只保留 id 和 isActive
-
我会将所有个人信息以一对一的关系分隔到一个单独的表中,然后您可以删除这些行。您可以将登录信息(SALTED HASH!)和用户 ID 等内容保存在另一个表中
-
它是如何在 Google、Facebook 或 StackOverFlow 中实现的? 祝你在 Google、Facebook 和 StackOverflow 中找到一个可以回答这个问题的人。
-
登录信息?如果我删除用户,我应该释放电子邮件和昵称,并让用户再次使用同一电子邮件注册。所以登录信息也是个人信息
标签: java sql database-design