当我们使用数据库模型驱动开发时,数据库规范的重要性不言而喻,本文是在日常项目中总结的数据库设计规范,当然这些仅适用于新研项目,对于有历史负债的公司和系统慎用。

字符编码规范

  • 统一编码为UTF-8。
    MySQL数据库中请将Character Set设置为utf8mb4、将Collation设置为utf8mb4_unicode_ci,并在数据库配置文件中设置lower_case_table_names=1

命名规范

  • 数据库、表、字段等所有名称的可用字符范围为:a-z, 0-9 和_下划线,长度要严格控制在30个字符以内。
  • 数据库、表、字段等所有名称均使用英文单词或英文短语或相应缩写,均使用单数名,禁止使用汉语拼音。
  • 数据库、表、字段等名称统一使用小写,单词间用_下划线分隔。
  • 数据库表名统一加模块或者微服务前缀(不超过6个字母)
  • 表主键统一命名为id,类型统一为varchar(128),对于部分有业务唯一性的根据唯一索引拼接为String,对于没有业务唯一索引的直接用UUID。
  • 所有的表字段中,除外键,其它字段名都无需刻意加前后缀,也不要在字段名前出现表名。
  • 外键约束以fk做前缀,后跟从表名称和主表名称:fk_从表名_主表名。
  • 表(广义)外键建议命名为:主表名_字段名,类型和主表中字段类型一样。如果一个表中有多个外键(字段)同时引用(对应)一张表的同一个字段,再根据实际情况加前后缀区分

注意:Oracle的表名和字段名默认是大写的,如果小写的话会自动加上双引号。有两种方法:
1. 去掉引号。PowerDesign设置方法:Database -> Edit current DBMS -> General -> Script -> Sql -> Format -> CaseSensitivityUsingQuote 设置为NO,如果设置报cannot open for writing错误,用管理员打开后设置。
2. 转为大写。PowerDesign设置方法: Tools -> Model Options -> NamingConvertion ->Table或Column中进行设置。

特殊字段

  • 所有表增加creator、created_at、updater、updated_at字段。
  • 表可选使用名称name,标签集tags字段,categories所属栏目字段。
  • 对于字典字段,编码字段后面跟code后缀,文本字段跟text后缀。
  • 表示日期时间的字段,都要有后缀,如果只精确到天则以date为后缀,如果要精确到时分秒那就用_at作后缀,使用Number(15)型时间戳(从1970年1月1日08时整开始的秒数)。
  • 是否注销、是否成功等类似的布尔型字段,名称前统一加is前缀,比如是否成功(is_success)、是否注销(is_active)、是否显示(is_display)等。
  • 表或字段应避开oracle或mysql的系统关键字或保留字,比如:date、user、system。

特殊表(可选)

  • xx_tag,以标签维度记录xx列表。
  • xx_category,以栏目维度记录xx列表。
  • xx_archive,xx的历史归档。
  • xx_history,xx的修改记录。

PowerDesign常见问题

  1. 由CDM生成PDM时,报 it is impossible to modify the "Data Type" attribute because of en enforce non-divergence model option ,一般是同一个cmd模型字段在不同表都引用了,但是在生成pdm的时候由于冲突合并,只有某一个表生效,另外一个表没有生效,导致改模型存在不一致,在生成的时候有个冲突解决的弹出框,找到冲突的字段打钩即可。