数据库表结构设计方法【来自转载】

当我们设计一个数据库存储模式时,要仔细分析数据模式,不要一股脑的把所有的数据都放在一起。那样的话对系统的可用性,高效能,扩展性都会有严重的影响。当然你设计的系统非常小,完全可以用最简单的方法。

要通过对业务的熟练,从不同的角度对数据进行多维度分析,一般可以从如下几个方向分析:

1.       数据流向

2.       数据访问特点

3.       数据量的大小

4.       数据的增长量

5.       数据的生命周期

根据以上数据特点,综合数据模式对数据表进行分类:

1.       恒数表

2.       递增表

3.       流水表

4.       状态表

5.       核心表

6.       过程表

在我们进行大数据量系统的模型设计时,根据不同的数据表,必须要遵循这几个要点。

核心表:

核心表是系统访问最频繁的,在设计时要考虑访问的代价,一定要遵循范式,注意字段的个数和字段长度,注意范围查询。如果核心表的数据量很大的话,要根据分区表或表路由等方式进行数据归档,以保证核心表的性能。

过程表:

过程表顾名思义是用来记录某一过程的,一般指数据的生命周期;在设计过程表时要设计一个明显代表数据生命周期的字段,对于数据仓库系统更是要合理的 利用生命周期字段,可以高效的统计不同生命周期的数据;在设计表时也要考虑增删改的代价,插入的代价最小,修改需要检索数据保留修改字段值,删除要保留整 条记录,代价最为昂贵。

恒数表:

恒数表几乎很少变化,类似我们使用字典表,在设计这样的表时,要设计好表的参数,较小的表就不建议建立索引。

递增表:

递增表的增长是很快的,并不是所有的数据都是常用的,所以分区的大小要尽量均衡,严格区分核心数据和过程数据,索引的键值选择性尽量高,谨慎使用复合索引,按照关联关系设计合适的分区和索引。

流水表:

流水表类似记录log,记录些流水信息,流水表数据量一般都很大,信息几乎没有变更。在设计时要注意分区的粒度和选择,一般不建议建立太多的索引。

状态表:

状态表一般指记录某一行为的状态过程,生命周期很短,很容易和过程表混淆。可以简单区别它们,状态表是动作行为的轨迹;过程表是数据的生命周期。

状态表的应用举例:

状态表在替代分布式事务起到重要的作用。

参考:http://blog.csdn.net/wyzxg/archive/2011/02/12/6181574.aspx

时间: 2024-12-13 10:46:31

数据库表结构设计方法【来自转载】的相关文章

数据库表结构设计方法

author:skate time:2011-02-12 数据库表结构设计方法 当我们设计一个数据库存储模式时,要仔细分析数据模式,不要一股脑的把所有的数据都放在一起.那样的话对系统的可用性,高效能,扩展性都会有严重的影响.当然你设计的系统非常小,完全可以用最简单的方法. 要通过对业务的熟练,从不同的角度对数据进行多维度分析,一般可以从如下几个方向分析: 1.       数据流向 2.       数据访问特点 3.       数据量的大小 4.       数据的增长量 5.      

数据库表结构设计方法及原则

http://www.cnblogs.com/RunForLove/p/5693986.html 数据库设计的三大范式:为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满足一定的范式. 在实际开发中最为常见的设计范式有三个:第一范式是最基本的范式.如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式:第二范式在第一范式的基础之上更进一层.第二范

数据库表结构设计方法及原则(Ali)

数据库设计的三大范式:为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满足一定的范式. 在实际开发中最为常见的设计范式有三个:第一范式是最基本的范式.如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式:第二范式在第一范式的基础之上更进一层.第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言).也

Activiti5.13数据库表结构设计

1.结构设计 1.1.    逻辑结构设计 Activiti使用到的表都是ACT_开头的. ACT_RE_*: ’RE’表示repository(存储),RepositoryService接口所操作的表.带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等). ACT_RU_*: ‘RU’表示runtime,运行时表-RuntimeService.这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据.Activiti只存储实例执行期间的运行时数据,当流程实例

MySQL中多表删除方法(转载)

如果您是才接触MySQL数据库的新人,那么MySQL中多表删除是您一定需要掌握的,下面就将为详细介绍MySQL中多表删除的方法,供您参考,希望对你学习掌握MySQL中多表删除能有所帮助. 1.从MySQL数据表t1中把那些id值在数据表t2里有匹配的记录全删除掉 DELETE t1 FROM t1,t2 WHERE t1.id=t2.id 或DELETE FROM t1 USING t1,t2 WHERE t1.id=t2.id 2.从MySQL数据表t1里在数据表t2里没有匹配的记录查找出来并

创建动态MSSQL数据库表的方法

代码如下: ImportsSystem.Data ImportsSystem.Data.SqlClient PublicClassForm1 InheritsSystem.windows.Forms.Form PrivateConnectionStringAsString="DataSource=.;InitialCatalog=;UserId=sa;Password=;" PrivatereaderAsSqlDataReader=Nothing PrivateconnAsSqlCon

数据库表结构设计

用户表(这里要注意,高并发的时候username是不能重复的,那么就采用了唯一索引user_name_unique,把username的唯一性交给mysql处理): 并且注意,密码是MD5加完盐之后的值,MD5是非对称加密,无法解密. 注意decimal的第一位数字是总位数,包含右边小数: /* Navicat Premium Data Transfer Source Server : 182.92.82.103 Source Server Type : MySQL Source Server

ofbiz数据库表结构设计(2)- CONTACT_MECH

ofbiz中,party的电话.地址等联系方式设计得非常巧妙,让我们来仔细分析一下. 有一个叫做CONTACT_MECH的表,这张表我们把它称作联系方式表,一个电话号码.一个通讯地址.一个电子邮件,都分别会在这张表里找到对应的一条记录.然后通过PARTY_CONTACT_MECH表与PARTY进行多对多关联,也就是一个PARTY可以对应多个联系方式,同样一个联系方式也可以对应多个PARTY(比如家庭成员共用一个电话号码). 在PARTY_CONTACT_MECH里,我们又发现了FROM_DATE

【转】ofbiz数据库表结构设计

真心不错的文章,可以加深对企业信息化的设计理解:) http://blog.sina.com.cn/s/blog_a2ca5d8c01017fa0.html http://blog.sina.com.cn/s/blog_a2ca5d8c01017m3r.html http://blog.sina.com.cn/s/blog_a2ca5d8c0101fbt6.html http://blog.sina.com.cn/s/blog_a2ca5d8c0101fbxt.html http://blog.