论坛首页 综合技术版 Database

数据库命名规则

浏览 779 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-02-27 关键字: 数据库 规则
这么多年的开发,始终未离开过数据库应用.从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生成相应的其它代码。爽!
   
时间:2008-02-27
数据库是为应用而存在的,而不是为Mapping存在的。
Mapping可以不用,数据库不能没有。
所以我认为命名规则就不该和Mapping搭上关系
   
0 请登录后投票
时间:2008-02-27
同意楼上的说法!我所推崇的命名规则跟楼主的差不多,就是使用前缀或后缀,然后各个单词之间用_来分开。并且表名统一都用大写。

好像在数据库和操作系统之间移植的时候会碰到大小写的问题,不知道大家有没有碰到过。我碰到过一次。
   
0 请登录后投票
时间:2008-02-28
引用
数据库是为应用而存在的,而不是为Mapping存在的。
Mapping可以不用,数据库不能没有。
所以我认为命名规则就不该和Mapping搭上关系

我的目的就是想让数据库的命名规则可以更好地被Java程序利用,更容易被工具生成易于理解的类名,字段名.
   
0 请登录后投票
时间:2008-03-10
跟一楼的意思差不多,但我认为,数据库是为保存数据而存在
数据库不应该跟应用程序直接mapping
LZ想方便程序利用的话,应该在view上做动作
至于命名,就看你们怎么协定了,但不应该用程序的思维去局限数据库
   
0 请登录后投票
论坛首页 综合技术版 Database

跳转论坛:
JavaEye推荐