实体字段和数据库表列的命名约定的最佳实践

我正在使用hibernate来创建实体和数据库表,我对命名约定感到困惑:

让我们举一个例子:

我们有一个部门实体如下:

public class Department { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name = "department_id", unique = true, nullable = false) @Basic(fetch = FetchType.EAGER) private long id; @NotBlank(message = "{name.required}") @Size(max = 25, message = "{long.value}") @Column(name = "department_name", length = 25, nullable = false) private String name; @Column(name = "department_admin_id", nullable = true) private Integer adminId; @ManyToOne(cascade = CascadeType.ALL) @JoinColumn(name = "ik_parent_department_id") // set the generated column name private Department parentDepartment; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JoinColumn(name = "department_id") private Set employees = new HashSet(0); } 

在命名例如部门管理员字段时最好的是,您是将该命名为department_admin_id还是admin_id以及该案例 (较低/资本)?

在命名属性时 ,您将它命名为departmentAdminIdadminId

请告知,在这种情况下最好的做法是什么,谢谢。

如果你的表被称为department那么从department_开始的所有列中都没有太大的好处。 只需将它们称为idnameadmin_id等。

毕竟,你们class上的成员都不是这样的前缀吗? 通过位于department表中,列已经与department具有隐式关系。 进一步的解释是冗长而不需要的。

编辑:
在java类中,我会使用camel case。 对于列名,我将使用下划线分隔。 大多数DB对表和列名称不区分大小写。

我会选择基于Java的属性和基于数据库的列名,所以:

 @Column(name = "FAVORITE_QUOTE") private String favoriteQuote; 

在OO-world中,您使用Java(camel-case)约定,同时保持DB约定(大写和下划线链接)。 如果您已经生成了数据库模式,则通常需要调整此模式。

如果你正在生成架构 – 你不想惹恼你未来的DBA 😉

编辑:我更喜欢使用favoriteQuote而不是userFavoriteQuite因为我认为它是多余的。 但是,我已经看到了很多数据库约定,其中以实体名称为列添加前缀使得DBA更容易编写查询。