我设计数据库常用的几个原则 (2)

易于优化,虽然很多开发不以为然,但是你的项目真的需要高性能时你会后悔莫及,而很多项目开始时由于开发不考虑性能导致后期优化很费劲,为什么不提前把可以做好的做到最好。

节省空间,虽然可能只节省一个bit,但积少成多,好的性能都是一点一点积累出来的。

防止java出现空指针,好多空指针都是由于脏数据引起的。

NULL可能导致计算错误。例如concat(a,b),若a是NULL,结果为NULL。

如果时间字段无法默认时间,完全可以设置为null,不要在心里就反对null或者反对not null,我们是设计数据库,不要出现党*争。

七、注意varchar

当字段可以确定长度不超过一定数值时,建议使用char定长字符串类型,但如果整张表已经出现变长字段,那么都使用变长字段即可。

规则

如果可以都使用定长字符串,如果做不到就都使用变长字符串

好处

节省空间

易于优化

速度快,DBMS易于处理

八、范式

尽量符合三范式

规则

字段不可分割、表有主键、数据没有允余、表间关系明确

好处

范式目的是使结构更合理,消除存储异常,使数据冗余尽量小。便于插入、删除和更新。

范式是给关系型数据库创立的。对于增删改查四种操作总体来说性能和易用性最佳。如果你们的表只需要插入和查询,或者只需要插入和清空,CRUD四种操作不全需要时,完全可以违反范式。具体情况具体分析,没有必要在心里就反对范式或者严格遵守范式。我们是设计数据库,不是教条主义,不要出现党*争。

九、固定字段

删除标志、创建时间、修改修改、创建人id、修改人id五个字段为必须字段。

规则

删除标志默认为未删除的值,

创建时间设置为当前时间,

修改时间设置为数据修改时更新,

创建人设置id默认为0

创建人设置id默认为0

好处

大部分情况,这些字段都有必要,除非不需要保留已删除数据的不需要删除标识,而这种情况,基本在项目开始时分辨不出需要逻辑删除还是物理删除。

创建时间、修改时间、创建人、修改人没必要解释

十、状态值 规则

状态值,尽量不使用0,一般选择10,20,30,40等,

好处

防止需求突然加中间状态,原来定义的是0,1,2,3连续的状态,突然需要在2,3之间加个新状态,只能使用4,这样会对开发理解造成障碍,而如果初始就使用10,20,30,40作为状态,突然需要在20,30之间的新状态,完全可以使用25,即好理解又符合逻辑。

0对于前端开发不友好。

最后、上线前统一字符集和排序规则

项目上线之前执行以下SQL,会查询出指定库下的所有字段的排序规则和字符集,一定要统一后,再上线
其他老生常谈的问题可以自己查找,比如建议使用自增列做主键等

select table_name,column_name,character_set_name,collation_name
from information_schema.columns where table_schema = '库名' and data_type = 'varchar'

好处

防止字符串比较时出现隐式转换。

总结、好的设计会提高性能,提升便利

在保证性能的基础上,方便开发、易于运维、易于交接。

以上原则不是铁律,如果有的原则导致性能急剧下降,使用很不便利,完全可以无视原则,具体情况具体分析。世界上没有放之四海皆准的规则。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgsfj.html