数据库设计中的一些小经验,拿来分享一下(有血的教训)。
在以往的数据库设计中遇到一些问题,由于当时缺乏经验造成了一些影响,所以在今后的工作中要加强这些地方的考虑。
1.对价格,温度等有可能变化的数据,在引用的地方只保存了相应的ID,而没有保存具体内容。比如:产品表里面有:名称、价格、类型等字段。订单表里面只存了产品ID,这样当产品价格变化时,再统计时价格就和当初订货价格不一样了。所以在订单表里面需要保存订货时的价格。
2.通过多级关系来获取相应记录。比如:文件表里面有创建人ID对应人员表,人员表里面有部门表ID。这样当过滤部门条件时,直接可以找到部门信息。但是这没有考虑到人员调整部门的情况,如果人员部门变化了,就会造成该人员创建的文件记录都跑到新的部门名下了。所以文件表还必须保存一个部门表的ID。
3.一些当时认为不会变化的数据几年后发生了变化。最明显的就是省市区名称变化。刚开始工作时,一个项目中对区县记录没做基础表,而且数据库里面直接存的就是区县的名称,当时考虑不会变化的,但是过了几年区县规划了,这时就造成就很大的问题,解决这个问题花费了大量人力和时间。此后再做项目时就把所有基础项都建立了相应基础表,使用的地方也都引用外键来处理。
4.对应图片、文件之类的保存在数据库表里面,还是保存的项目的相应文件夹里面,对这个问题一直没有完善的解决办法。存数据库表的一个字段里面,这样好处是备份方便,只有把数据库备份了所有数据都丢不了,缺点是数据库会越来越大,有的项目几个后数据库都有10G以上了。 保存在项目文件夹里面正好相反。
5.一些表建立的是联合主键,这种造成一些操作很麻烦,而且效率也不高。所有以后在建表时都建立唯一自增主键,这样维护起来很方便,对于主从表操作也简便。
以上都是在SQLServer数据库上的经验,其他数据库没试过。