欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

从范式和性能的角度谈一谈表的设计

程序员文章站 2022-06-16 19:10:01
...

简介 数据库中表的设计是一个老生常谈的话题,对于表的设计却依然存在某些误区,本篇文章对来从范式和性能的角度谈一谈数据库的设计。 设计数据库? 首先第一个问题是,对于表的设计而言,我们究竟需要何种程度的设计。这取决于您数据库的规模,打个比方,就

简介

    数据库中表的设计是一个老生常谈的话题,对于表的设计却依然存在某些误区,本篇文章对来从范式和性能的角度谈一谈数据库的设计。

 

设计数据库?

    首先第一个问题是,对于表的设计而言,我们究竟需要何种程度的设计。这取决于您数据库的规模,打个比方,就好比您盖一个两层小楼,基本无需什么设计,直接上手即可,如果盖一个两层小楼也去找设计院的话,服务器空间,那岂不是画蛇添足。但是对盖一座大厦来说,不做规划和设计,就难以想象了。

    但与盖楼这个比喻不同的是,数据库会增长,未来数据量的增长和并发量可能超出您的估计。因此,如果做一个好的设计,美国服务器,在面对未来数据和并发的增长时,也许就不会那么狼狈。

    请记住,香港虚拟主机,做一个好的设计和坏的设计所需话费的成本差不多,那我们为什么不在一开始设计表时就有所注意。

 

范式?

    范式也是一个老话题了,关于范式的介绍也是满天飞了,这里就不在细说了。对于范式,我喜欢分为两大类:第一范式和其他范式。第一范式意味着数据不可再分,对此具体的解释我会接下来说到。而其他范式讲的是一件事,表中主键唯一标识其所代表的行,其他列都是对该行的描述。

    范式化使得您的设计符合关系数据库。也是一个标准化数据的过程。尤其是第一范式,即使是数据仓库,也是需要遵循的。

    下面先说说第一范式。

 

第一范式

    第一范式意味着将数据分解到最低层级,那数据分解到第一层级的标准分为以下3条:

    首先,列值按照业务类型不应该可以再分。这也是为什么表的命名应该是复数形式,而列的命名往往是单数形式。因为列所代表的意义符合第一范式的话,那应该是唯一的。

    那反过来,什么样的表不符合第一范式呢,比如说:

 

    其实使用上述代码并没有什么错,但由于上述代码而造成性能和数据完整性问题的时候,就不对了。下面我们再来看一个由于不符合第一范式而造成的导致性能问题的代码,如代码清单1所示。

--错误 SELECT * from Person Where SUBSTRING(fullname,0,1) =‘王’   --正确 SELECT * from Person where FirstName = ‘王’