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

时间:2011-11-14 11:17:26

标签: java hibernate database-design naming-conventions

我正在使用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<Employee> employees = new HashSet<Employee>(0);


}

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

在命名属性时,您为什么命名, departmentAdminId adminId

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

2 个答案:

答案 0 :(得分:3)

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

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

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

如果您正在生成架构 - 您不想惹恼未来的DBA; - )

编辑:我更愿意选择favoriteQuote代替userFavoriteQuite,因为我认为这是多余的。但是,我已经看到了很多数据库约定,其中以实体名称为列添加前缀使得DBA更容易编写查询。

答案 1 :(得分:3)

如果您的表格被称为department,那么从department_开始的所有列中都没有太大的好处。只需称呼他们idnameadmin_id

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

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