数据库设计经验之--表的设计

1、定义一些字典表,在命名字段并为其指定数据类型的时候要保证一致性,可以在字典表里定义常用字段的名称、类型、枚举值及其对应的意思。枚举值可以用整型(有大小关系,例如:权限级别)或短字符代码(便于扩充,例如:渠道标识),这样在实际表记录中字段值可以较小,对于大表可以省空间,同时提高表扫描的效率。

2、尽量不要使用auto_increment类型字段作为主键,这样会使分布、备份、还原有一定的问题。

3、如果表中的数据会经常变动,一定要加上“最近更新日期/时间”字段,对于频繁变动的记录,还可另外再加一个变更日志表。变更日志表一般在查错或事后审核时用,所以在实时系统里该表可以不加任何主键及索引,提高插入效率,然后把数据放到非实时库中建索引进行查询。

4、外键用来保证数据一致性,但在实时系统里,通过应用程序逻辑的严密性保证数据的一致性,从而不在表上定义外键关系,可以起到提高数据库性能的作用,特别是对于大型表而言。

5、一般的表设计都会遵行第三范式,对于复杂的实时系统,会产生许多关联表,对于更新及删除操作,不会产生什么性能问题,但是对于查询,也许会造成负面的影响。如果实时系统里存在大量不可少的关联查询,比如要超过3个以上表进行关联时,考虑到性能因素,可以在表中加入少量的冗余字段,以减少表的关联操作,但这种行为必须谨慎考虑,防止对更新及删除产生过多影响。

6、字段类型的选择可考虑一定的扩展性,但是尽量选择存储小的类型和长度,例如:能用小整型的地方不要用大整型;如果字段是固定长度或长度变化范围不太的,选用固定长度类型;如果字符类型与整数类型都可用,尽量选整数类型。

7、对巨大数据量表的设计,可以考虑表分区实现。表分区是将一个大表分成多个分区表,以提高大表的访问性能。如果某个大表满足以下两个条件,可以适当的考虑分区:
(1)存在适合分区的表字段,并且只访问某一特定条件的数据。如存在日期字段,则可考虑按季度或按月份进行分区。
(2)由于数据量大,导致对表的访问开销巨大,不能达到预期的处理响应。分区可以将表和索引分的更小,更容易管理,从而提高响应速度。

8、流水表,可以分为当前表和历史表。例如:考虑业务的需要,可以把最近三个月的数据放在当前表中,三个月以前到一年以内的数据放在历史表中,配置固定任务,每天晚上或在业务不频繁的时候把过期数据从当前表移到历史表中。当前表小,可以少建索引,历史表适量建多些索引,一年以前的数据定时移到非实时数据库中存档。如果历史表太大,做备份归档,并删除数据库旧记录。

9、上面是数据的水平分割方式,还可以考虑数据的垂直分割方式,将原始表分成多个包含较少列的表。例如下面的情况:应用程序经常只需要访问部分数据列,很少时候需要访问其它部分数据列。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值