数据库设计实践:你不想做的七件事

21CTO导读:如果你正在设计数据库,那么让我们看一下您不想做的七件事情有哪些。


database.jpg

 
你的数据库设计太糟糕?没人告诉你这个原因是什么?它有两个原因:无知与冷漠。他们要么不知道这是不好的,要不根本不在乎。
 
作为15年的数据库专家,我看到太多形形色色的数据库设计,有好的,有不好的,大多数时间我想骂人。
 
每当我看到一个不太好的数据库设计时,我问我自己:这些数据怎么能得到如此不好的待遇呢?数据处理的时间可能长于代码,因此应该对其进行处理。
 
因此,我希望每位开发者能尊重数据库设计的过程。在本文中我尝试指出你做错了什么,相信你以后会感谢我的。
 
以下,是在数据库设计中你不愿意做的七件事。
 
1 自己动手
 
就像看牙科一样,数据库设计最好留给专业人士,而不是你自己去做的事情。我不在乎你是否能在最后用一个花哨的镜子拿到其中一个探头,你应该停止在嘴里塞一些锋利的东西。
 
不能因为你可以做某事,但并不意味着你就可以做好。如果之前你没有设计过数据库,那么就不要将任务的关键作为您的第一个项目,请出去聘请专家来帮助你。
 
我认为迪尔.伯特总结得很好,如下图:
 
dbmanhua.jpg

 
 
2 没有表现期望(或者没有期望)
 
我参与了多个项目,根本没有任何绩效期望,直接投入生产环境时表现得“非常慢”。如果没有定义可接受的性能水平,在后面几个月中,你会很难放松。最终的结果是,我们虽然部署了系统,但是没有人会对这个过程感到满意。
 
如果没有对性能做预期,会在部署的早期就会出现一些令人头疼的问题。同样,如果你对性能有很大的期望,相信会遇到一些失望。如果你没有做任何的压力测试,有可能出现非预期的表现。
 
3 列设置的宽些,以防万一
 
我们也会经常看到数据类型被随意设置,似乎 它们无关紧要。
 
但是事实是(你可能在大学时被告知这一切)范围很重要。如果我们知道某个列的值可能值介于0到100,000之间,那么使用INT类型完全正常,不需要为该列设置成一个BIGINT数据类型。
 
为什么这很重要?BIGINT数据类型需要8个字节的存储空间,而INT只需要4个字节就可以。如果用了BIGINT,相当对于每行数据浪费4个字节。
 
嗯,听起来也不是很多,对吗?
 
那么,让我们思考一下,如果你的表有两百万行记录。将这些行乘以4个字节,就有800万字节或大约7.8MB的空间浪费。我知道听起来还不是很多,对吗?好吧,它加起来会很快。我只向你展示了一个列的一个例子,比如日期类型的字段如何?如果不需要在1900年之前或2079年之后的日期,那么使用SMALLDATETIME很可能更有用。哦,不要忘记这些字段可以编入索引,这些索引也会不必要地加宽。
 
我们总结以上这些原因,提醒大家选择正确的数据类型很重要。花点时间,努力在开始时把事情就做正确。
 
4 不检查外键作为索引的一部分
 
当然,我会假设你已经定义了外键。我见过不少数据库,几乎没有主键,外键,甚至没有定义任何索引。我不知道他们为什么这么做,但是人们肯定会找到这些问题。
 
如果你定义了外键,你应该评估,看看添加索引匹配外键是否有用,在一些情况下,这是有用的。
 
因此,应该将外键审核作为数据库设计的一部分。
 
5 索引每个列或不索引某个列
 
假设你已经设置了一些实际的性能要求,应该考虑建立索引。
 
大多数情况下,我看到数据库中使用太多的索引,这通常是使用索引工具引发的结果。大多数的文章都会提示你,索引是需要的,我们会创建十几个索引让一个查询运行得更快。
 
虽然索引非常适合帮助我们更快的读取数据,但它也会有一些副作用,会增加DUI(删除、更新、插入)语句的开销,如果表中的每个列都被添加了索引,那么任何数据插入表中时,都会增加系统的写入性能开销。
 
6 忘记数据质量
 
作为一名专业DBA,我知道我的角色一部分是专注于恢复。如果系统出现故障,我需要快速恢复数据,这是我关注的主要关键点。而数据库设计人员不用担心数据的恢复,而要把焦点关注在数据的完整性上来。
 
当你在设计数据时,需要确保考虑了数据质量。我们不能指望别人帮你这样做,想象一下,如果DBA期望其它人恢复数据,这是不可想象的事。事实上,我看到很多垃圾数据进入,垃圾出的数据库系统。
 
有很多方法强制执行某种类型的数据完整性。规范化范式只是一种方式,另一种方法是部署数据质量服务(网址:https://docs.microsoft.com/en- ... -2017),它会帮我们执行一定级别的数据质量的规则与约束。
 
7 没有数据备份与存储策略
 
我愿意打赌你现在没有超过七年的数据。无论系统如何升迁,七年的数据似乎神话一般。如果你问某人他们需要多长时间保存系统的记录,答案就是“七年”,即使真正的答案只有七周。
 
在数据库系统设计时要考虑一件事:始终在表中存储和保存好。
 
在设计数据库时,需要花时间计算将保留多少数据。知道这些信息可以帮助在占用空间越来越大的数据,预测性能和磁盘的预期。
 
小结
 
以上是我看到的好数据库如何变成糟糕数据库设计的几件事。如果你发现正在做这七件事中的任何一件事,随着时间的推移,数据库可能会越来越不好处理,同时降低性能。一起做好这七件事,与大家共勉。
 

编译:李维刚
来源:21CTO


0 个评论

要回复文章请先登录注册