数据库设计必须考虑的细节

发表于:2007-07-04来源:作者:点击数: 标签:
1、为了避免数据转换时可能遇到的主键意义冲突,表格的主键应该选择无意义的INT类型整数。推荐叫做id。而且使用INT型字段作主键和外键时,表间连接的效率也很高。 2、每个有意义的表格应该添加comment备注字段,以存储无法完全记录的其他数据。 3、每个实体

1、为了避免数据转换时可能遇到的主键意义冲突,表格的主键应该选择无意义的INT类型整数。推荐叫做id。而且使用INT型字段作主键和外键时,表间连接的效率也很高。


2、每个有意义的表格应该添加comment备注字段,以存储无法完全记录的其他数据。


3、每个实体应该记录开始启用时间和停用时间,仅在这段时间内是有效的。(by gashero)启用时间可以在生成表格时自动生成,结束时间可以预先设为世界末日。这样可以通过时间是否等于世界末日,或者当前时间是否小于结束时间来判断当前是否可用。


4、实体间联系应该尽可能的考虑到发生多对多联系的可能,(by gashero)很多业务制定者也无法确定是否会发生这种联系。


5、避免使用varchar数据类型,这种不定长数据类型会增加处理时间,降低性能,一般仅用于注释字段等等可能非常大,但是长度却不确定的字段。


6、字段名的选取可以参考面向对象的思想,字段名只要描述表格的某一属性即可,无需在字段名之前一定要加上表格名,这样只会徒增烦恼。


7、字段设计常常会遇到集合元素的选取,比如实体的几种状态。(by gashero)这种设计常常很烦躁,如果使用有意义的字符串作值,则引用完整性维护有相当的难度,而且性能很低。如果使用外键序号来代表状态,而引用另外一个标识状态的表格,则表格连接也有一定的性能损失。但是一般来说还是推荐后一种方式。引用完整性的作用不仅仅在于效率,而且在于维护能力。


8、存储过程绝对是个好东西,不过很可惜,有些开源数据库不支持。可以把存储过程想象为一个可调用的函数,可以返回记录集。所以这个函数可以存在于数据库中也可以存在于程序中,如何选取是个爱好问题。数据库内部实现的存储过程效率很高,但是对维护性有一定的问题。程序中实现的存储过程几乎没什么效率可言,仅仅是方便而已。


9、不要太盲目于整形和浮点型的效率。如果你有兴趣,可以自己测试一下,在现代的电脑中,浮点数的计算速度比整数类型的还高。

原文转自:http://www.ltesting.net