设计数据库时字段类型和长度建议

本文提供了数据库字段设计的实用建议,包括开关型字段、数据字典编码字段、一般性录入字段等不同类型字段的最佳长度设定,以及数字字段的精度考虑。
对于任何字段长度都不应该过于小气,否则未知的变化会造成前后台都要修改   
                      
1、对于开关型字段建议number(1,0) 而不是varchar2(1),避免用户错误保存Y/N,而不是1/0,这样可能会引入大小写问题 
                                    
2、对于数据字典编码字段,不要小气的确定为3位,最好统一为32位 
经验证明,有时受从其它系统数据接入的影响,由于没有对照项,会直接保存原始值,而原始值一般都5-10位 
统一为32位的好处是,可以考虑利用GUID来生成数据字典编码,这样在数据合并时非常有优势. 
                            
3、对于一般性录入字段,如:编号,轴号,车号,不要为了一时的"绝对"而设置确定的长度,最好统一成较优的长度,如32位!   
      如:车号最早是6位,没多久就改成了7位! 轴号开始为8位,但实际上有15位的轴号!轴承编号由10改为了20位   
                                      
4、对于类似名称的字段: 如单位名称, 数据字典项目的名称等,最好再大一些,设成60位!   
                
5、对于备注类型的字段,一般内容在30个汉字左右,所以推荐设置为100   
                
6、对于长文本的字段,一般内容在200个汉字左右,推荐设置为1000   
                      
7、对保存SQL语句的字段(特殊情况,如配置传输条件等),至少要设置为2000,最大是4000   
                                        
8、对于数字字段,除非精度要求,统一为number是个较好的选择 (如果需要,请尽量提前考虑好精度可能的变化)
number默认精度为15位(整数位数+小数位数=15位,小数点位置任意),其它大数值也可以保存,但是采用的是科学计数法,有精度损失   
      用number,不指定精度的最大的好处是不限制数值的精度和范围   
       如果指定number(2,1),则存入的数值范围在-9.9 至 9.9之间,如果用户提出精度调整为2位,则需要修改数据库和程序!   
                              
9、对于日期型的就没有什么说法了  
在 GaussDB 数据库中,可以通过查询系统表系统视图来获取表字段的类型及长度信息。以下是一些常用的方法: ### 查询字段类型长度 #### 使用 `pg_attribute` 系统表 GaussDB 基于 PostgreSQL 的架构设计,因此可以使用类似于 PostgreSQL 的系统表进行查询。具体来说,`pg_attribute` 表记录了数据库中所有表的字段信息,包括字段名、数据类型、长度等属性[^2]。 查询示例: ```sql SELECT a.attname AS column_name, t.typname AS data_type, a.atttypmod AS type_modifier, a.attlen AS length FROM pg_class c JOIN pg_attribute a ON c.oid = a.attrelid JOIN pg_type t ON a.atttypid = t.oid WHERE c.relname = 'your_table_name' AND a.attnum > 0 ORDER BY a.attnum; ``` 此查询将返回指定表的所有字段名称、数据类型、类型修饰符以及存储长度。 #### 使用 `information_schema.columns` 视图 如果需要更标准的方式查询字段信息,可以使用 SQL 标准的 `information_schema.columns` 视图,该视图提供了关于表列的详细信息。 查询示例: ```sql SELECT column_name, data_type, character_maximum_length AS max_length FROM information_schema.columns WHERE table_name = 'your_table_name'; ``` ### 特殊数据类型的处理 对于某些特定的数据类型,如 `VARCHAR` 或 `NUMERIC`,`atttypmod` 字段会包含额外的信息。例如,`VARCHAR` 类型的最大长度会存储在 `atttypmod` 中,但需要注意的是,其值比实际长度多 4;而 `NUMERIC` 类型则可以通过 `atttypmod` 获取到精度小数位数等信息[^2]。 ### 示例:获取 VARCHAR 类型的实际长度 ```sql SELECT attname AS column_name, atttypmod - 4 AS actual_max_length FROM pg_attribute WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = 'your_table_name') AND atttypid = (SELECT oid FROM pg_type WHERE typname = 'varchar'); ``` 通过这些方法,可以有效地获取 GaussDB 数据库表字段的类型及长度信息。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值