数据库设计及日常使用规范-数据库设计

以下内容来源于公司DBA的分享,做个记录,便于日后自己翻阅,也分享出来共同学习,如果有不合理的或不完善,也请指出。

表和列命名规则

  • 表和列全部使用小写。
  • 表名称推荐以业务线开头,后跟子系统,下划线分割。
  • 列的命名禁止使用数据库或系统的保留字,比如type、order、number、limit、date、from、where等。
  • 敏感字段的命名方式,手机号统一使用mobile,不同业务的手机号加前缀,比如alipay_mobile。身份证使用id_number。登录名使用user_name 。帐号相关使用account,比如alipay_account,pay_account。

建表原则

  • 无特殊需求字符集使用utf8。
  • 存储引擎使用innodb。
  • 表上自增长ID做主键。
  • 单表字段数上限控制在20-50之间。
  • Text及大字段类型单独存在一张表中,和业务表分离。
  • 不同的业务创建不同的表,避免在一个表中存所有的字段。
  • 经常使用的字段存在同一张表中,不常用的字段单独存放在另一张表中。
  • 使用enum代替varchar,Enum实际存的tinyint。
  • 表中字段尽量都是NOT NULL,根据需要设置DEFAULT值。

表维护

  • 新增字段时,添加到表的最后,禁业添加到某列之前或之后(after、before)。
  • 同一表上增加或修改多个字段时,合并成一条并更语句。
例:
    alter table table_a add a ..;
    alter table table_a add b ..;
合并:
    alter table table_a 
    add a ..
    add b .. ;

用好数值类型

  • tinyint(占用1字节)、smallint(占用2字节)、mediumint(占用3字节)、int(占用4字节)、bigint(占用8字节)。
  • 根据最大值范围选择合理的类型。如果不需要存负数,就用无符号unsigned。
  • 存储精确浮点数必须使用 DECIMAL 替代 FLOAT 和 DOUBLE。例:decimal(10,2)
  • 选择性很少的状态status、type等字段使用tinyint。
  • 不同的数值类型占用字节数及取值范围。


用好日期类型

  • 常用的三种类型Datetime(占用5字节)、date(占用3字节)、timestamp(占用4字节)
  • 建议使用timestamp,如不需要时间信息,使用date。
下图为日期类型所占用字节数


尽可能的使用数值代替字符串

  • 使用数值:占用空间小、查询更快、高效。
例如:IP字段转换成数值存储 int unsigned
            使用函数 inet_aton () 和 inet_ntoa()

目前表中有text字段

如果没有特殊需求,禁止使用select * 。需要那些信息就select 那些字段,否则,会造成大量的资源浪费,造成网络间传输大量信息。

创建索引

  • 索引命名ind_表名_列名组合
  • 唯一性索引uni_表名_列名组合
  • 重复值较多的列,不适合建索引。
  • 索引创建过多,影响insert 和 update 速度,控制好索引数量。
  • 创建索引时咨询DBA。

程序端

  • 程序端禁止使用set语句,包括set names、set sql_mode等
  • 禁业连接主库进行大的统计和查询,如有统计需求,联系DBA,商量解决。

外键

  • 好处:保证数据的一致性。
  • 缺点:需要额外的锁,高并发环境下,性能会下降。会对父记录加一个共享读锁

数据库日常操作

  • 添加数据库和帐户统一由DBA来做。
  • 创建表和添加字段统一由DBA来做。
  • 如有大批量的插入或更新数据,提前邮件告知,和DBA商量解决办法,以免造成主库的阻塞和从库的大量延迟。禁止在没有提前通知的情况下,大批量的插入或更新数据。
  • 有推广大促等导致数据库流量增加的活动,请提前通知DBA。
  • 主库上禁业跑大统计及查询,如有特殊需求,请提前通知DBA。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值