数据库设计字段类型和长度如何?

数据库设计字段类型和长度如何?

用户需求经常是不完整, 不精确, 快速变化的, 我们在数据库建模时需要尽量避免这些问题对项目带来的影响:

  • 对于"是或否"等类型的字段建议number(1) 而不是varchar2(1),避免用户错误保存Y/N,而不是1/0,这样可能会引入大小写问题
  • 对于数据字典编码字段,不要小气的确定为3位,最好统一为40位
    统一为40位的好处是,可以考虑利用GUID(36位)来生成数据字典编码,这样在数据合并时非常有优势,36取整为40.
  • 对于一般性录入字段,不要因为需求文档里的"确定尺寸"而设置确定的长度,最好统一成较优的长度,如40位!
    如:车号最早是6位,没多久就改成了7位! 轴号开始为8位,但实际上有15位的轴号!轴承编号由10改为了20位
    但是超过40位的录入项目还没有见过, 比较罕见.
  • 对于类似名称的字段: 如单位名称, 数据字典项目的名称等,最好再大一些,设成60至80位!
  • 对于备注类型的字段,一般内容在30个汉字左右,可以设置为100 - 500 之间
  • 对于长文本的字段,一般内容在200个汉字左右,可以设置为1000
  • 对保存SQL语句的字段(特殊情况,如配置传输条件等),至少要设置为2000,最大是4000
  • 对于数值型字段, 直接用number ,不指定精度和小数位是个较好的选择
    number默认精度为15位(整数位数+小数位数=15位,小数点位置任意),其它大数值也可以保存,但是采用的是科学计数法,有精度损失
    用number,不指定精度的最大的好处是不限制数值的精度和范围
    如果指定number(2,1),则存入的数值范围在-9.9 至 9.9之间,如果用户提出精度调整为2位,则需要修改数据库和程序!
    为了性能和计算精度, 对确定精度的类型应该明确指定精度!
    比如"是或否"类型的字段, 应该为 number(1)
    用于排序的字段, 应该为 number(10)
    用于乐观锁定的字段, 也应该为 number(10)
  • 对于日期型的没有什么好说的.