我想知道与Hibernate的数据库设计的最佳做法。JPA /休眠的独立表vs额外列
我有一个用户实体将有很多不同的设置。对于每组设置,我必须将它们作为额外的列添加到用户表中,或创建一个单独的实体并将它们与@OneToOne关系连接起来。我的理解是@OneToMany和@ManyToOne关系通常应该在单独的表中进行,因为您不应该有可选的列。
但@OneToOne关系有点不清楚。我认为有一种情况是使用@OneToOne,因为默认情况下ORM会选择所有的单个属性,并且有很多列会减慢这个过程。
我所讲的可以通过
@Entity
public class User{
@OneToOne
private ForumSettings forumSettings;
@OneToOne
private AccountSettings accountSettings;
@OneToOne
private SecuritySettings securitySettings;
}
VS
@Entity
public class User{
@Column
private boolean showNSFWContent; //Forum Setting
@Column
private int numberOfCommentsPerPage; //Forum Setting
@Column
private boolean subscribedToNewsLetter; //Account Setting
@Column
private boolean isAccountBanned; //Account Setting
@Column
private boolean isTwoFactorAuthenticationEnabled; //Security Setting
@Column
private boolean alertForSuspiciousLogin; //Security Setting
}
以上可以说明的一个例子是一个简单的例子来说明这个概念,但在实践中会有更多的第二部分的列。
我知道这可能是基于意见的,但我希望有人可以分享两种选择的优点/缺点。
非常感谢你
还有['@ Embedded'](https://en.wikibooks.org/wiki/Java_Persistence/Embeddables)属性。 –
为什么不制作基础'设置'类,然后将属性'类型'添加到'设置'类?然后'User'和'Settings'之间的关联可以是'OneToMany'。一般来说,这是更多的数据库设计问题,而不是实现(jpa,hibernate)。你在问什么是如何规范化数据。 – fg78nc