中小应用关系型数据库设计基本思路

中小应用关系型数据库设计基本思路,个人见解,欢迎指正。

对于数据增长不大的A表,可以设计成一个表

A表

id(int)

content(varchar 5000)

audit_time(datetime)

user_id(int)

1

外面下雨了

2014-08-31 00:10:12

1324

2

这是一个不错的主意

2014-08-31 00:12:12

2014

抽取大字段到另一个表中

对于数据增长比较大的A表,抽取出比较大的content字段,单独放入另一张B表中,从A表中移除该content字段;

B表,把content字段抽取到这个表中,减小A表的大小:

id(int)

a_id(int)

content(varchar 5000)

1

1

外面下雨了

2

2

这是一个不错的主意

对主表进行分表

如果不用根据这张A表进行复杂的排序查询,只需要使用ID进行查询,则可以直接把这张A表进行分表;

对A表分表之后,如果需要进行audit_time字段的排序查询,则可以把该audit_time字段抽取到另外的C表中,使用A该表的主键进行关联,这样按照audit_time字段排序查询的时候,直接从C表查找到a_id,然后根据a_id从A表获取完整的记录;

C表,这个时候对A表进行分表,把所有的A表记录都存放到C表中:

id(int)

a_id(int)

audit_time(datetime)

1

1

2014-08-31 00:10:12

2

2

2014-08-31 00:12:12

给主表建立一些字段的关联表,对关联表进行分表,并使用分表进行查询,加快查询速度

如果A表不适合分表,但是有些需求需要查找user_id字段值为1324的所有记录,则可以把user_id字段放入另一个D表中,对这张D表进行分表(可以对user_id 取模进行分表,如user_id为12,则12%10 = 2 则可以把该记录存入D表的第三张分表中),这样也可以加快根据user_id字段查找记录时的速度了。

D表,直接从D表查找符合user_id值的记录:

id

a_id

user_id

1

1

1324

2

2

2014

另外,可以适当的在分表中增加冗余字段,减少表之间的关联查询,从而提高性能。

以上是几种常见的场景,具体的分表策略还得根据实际的业务逻辑进行设计。

另外,为了减少数据库的压力,必要的时候,添加对象缓存和页面缓存,对于改动或增加比较频繁的数据,则可以考虑使用如redis之类的内存数据库

arthinking wechat
欢迎关注itzhai公众号
  • 本文作者: arthinking
  • 本文链接: mid-app-rdbms-design-idea.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!