电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

正规化的表格设计能提升应用性能(一)


发布日期:2021/5/4
 
在动态网站的设计中数据库设计的重要性不言而喻如果设计不当查询起来就非常吃力程序的性能也会受到影响无论你使用的是MySQL或者Oracle数据库通过进行正规化的表格设计可以令你的PHP代码更具可读性更容易扩展从而也会提升应用的性能

简单说来正规化就是在表格设计时消除冗余性和不协调的从属关系在本文中我将通过五个渐进的过程来告诉你在设计中应该了解的正规化技巧从而建立一个可行而且 效率高的数据库本文也会详细分析一下可以利用的关系类型

这里假定我们要建立一个用户信息的表格其中要存储用户的名字公司公司地址和一些个人的收藏夹或url在开始时你可能定义一个如下的表格结构

零状态形式

users

name company company_address url url

Joe ABC Work Lane

Jill XYZ Job Street

由于没有进行任何的正规化处理我们将这种形式的表称为零状态形式的表留意其中的url和url字段如果我们在应用中需要第三个url呢?这样你就要在表格中多加一列很明显这不是一个好办法如果你要创建一个富有扩展性的系统你就要考虑使用第一个正规化的形式并且应用到该表格中

第一级正规化形式

消除每个表格中重复的组

为每套相关的数据建立一个独立的表格

使用一个主键来标识每套相关的数据

以上的表格明显违反了上面第一条的规定那么第三条的主键又是什么意思呢?很简单它只是在每个记录中加入一个唯一的自动增加的整型值通过这个值就可以将两个姓名一样的记录区分开来通过应用第一级正规化形式我们得到了以下的表格

users

userId name company company_address url

Joe ABC Work Lane

Joe ABC Work Lane

Jill XYZ Job Street

Jill XYZ Job Street

现在我们的表格可以说已经处在第一级正规化的形式了它已经解决了url字段的限制问题不过这样的处理后又带来了一个新的问题每次在user表中插入一条记录的时候我们都必须重复所有的公司和用户数据这样不仅令数据库比以前大了而且很容易出错因此还要经过第二级正规化处理

第二级正规化形式

为应用在多条记录的字段建立独立的表格

通过一个foreign key来关联这些表格的值

上一篇:如何改变当前路径下所有目录和文件的所有权

下一篇:nvarchar和varchar的转换问题