这么多年的开发,始终未离开过数据库应用.从MSSQL到Oracle,现在又要mysql,真是要命.为了不让数据库的设计工作全压在一个人身上,所有队员都可能会做一部分工作,为自己负责的需求建立表结构.于是统一数据库的表名和字段名规则就不可避免.不过在做数据库设计时常常遇到同事对表名,字段名设计规则的质疑.因为到现在为止,我确实没有发现很通用的设计规则,在不同的项目环境下可能会启用不同的规则.
我最常用的规则:
1.表名分两部分组成--前缀_主题.如库存表whs_inventory,whs是前缀,表明这是用于仓库模块的,inventory是主题,表示这个表的业务概念.
2.字段名也分成两部分--前缀_主题.如库存数量inv_amount.inv是库存表的缩写,amount是主题,表示这列用来存储库存的数量.
3.外键的引用.如果库存表中引用了货品的ID,那么那一列就用Crg_id,而不是inv_crgid或inv_cargo_id.
现在问题就出来了,以前是手工建立相关的POJO,所以不是什么大问题.现在要通过Appgen或是Middlegen,生成的类名,字段名和Mapping文件名都不符合要求.如果用Maven生成代码的话,要改动的地方更多,想起来就恐怖!能想到的方法就是先生成Mapping文件,把不符合要求的类名和字段名全部改过来,然后再根据Mapping文件生成POJO.但是效率就低很多了.
候先的规则:
1.表名没有前缀,直接用主题命名.库存就是inventory,不做模块的划分.
2.字段名也甩掉前缀,该是什么就用什么.
3.外键字段用表名和字段名.如cargoId.这一点有个小问题,如果货品ID在多个表中被引用,可能会出现不同的形式,cgrId, cargo_id.这一点常常令人头痛.
当然了,数据库设计规则函盖的内容很多,这里我只谈到表名和字段的命名规则.希望大家能够他享更多更有效的最佳实践.
补充:
现在使用appfuse2.x,通过mvn appfuse:gen-model先生成POJO,修改后再用mvn appfuse:gen生成相应的其它代码。爽!
我最常用的规则:
1.表名分两部分组成--前缀_主题.如库存表whs_inventory,whs是前缀,表明这是用于仓库模块的,inventory是主题,表示这个表的业务概念.
2.字段名也分成两部分--前缀_主题.如库存数量inv_amount.inv是库存表的缩写,amount是主题,表示这列用来存储库存的数量.
3.外键的引用.如果库存表中引用了货品的ID,那么那一列就用Crg_id,而不是inv_crgid或inv_cargo_id.
现在问题就出来了,以前是手工建立相关的POJO,所以不是什么大问题.现在要通过Appgen或是Middlegen,生成的类名,字段名和Mapping文件名都不符合要求.如果用Maven生成代码的话,要改动的地方更多,想起来就恐怖!能想到的方法就是先生成Mapping文件,把不符合要求的类名和字段名全部改过来,然后再根据Mapping文件生成POJO.但是效率就低很多了.
候先的规则:
1.表名没有前缀,直接用主题命名.库存就是inventory,不做模块的划分.
2.字段名也甩掉前缀,该是什么就用什么.
3.外键字段用表名和字段名.如cargoId.这一点有个小问题,如果货品ID在多个表中被引用,可能会出现不同的形式,cgrId, cargo_id.这一点常常令人头痛.
当然了,数据库设计规则函盖的内容很多,这里我只谈到表名和字段的命名规则.希望大家能够他享更多更有效的最佳实践.
补充:
现在使用appfuse2.x,通过mvn appfuse:gen-model先生成POJO,修改后再用mvn appfuse:gen生成相应的其它代码。爽!