数据库正规化和设计技巧(1)
在动态网站的设计中,数据库设计的重要性不言而喻。如果设计不当,查询起来会非常困难,程序的性能也会受到影响。无论你使用的是mySQL还是Oracle数据库,通过形式化的表设计,都可以让你的PHP代码可读性更强,更容易扩展,这也会提高应用程序的性能。
简单来说,规范化就是消除表格设计中的冗余和不协调的从属关系。在本文中,我将通过五个循序渐进的过程告诉你设计中应该知道的形式化技巧。从而建立一个可行且高效的数据库。本文还将详细分析可以使用的关系类型。
这里,假设我们要建立一个用户信息的表,表中存储了用户的姓名、公司、公司地址以及一些个人收藏夹或网址。开始时,您可以定义一个表结构,如下所示:
零状态形式
用户
名称公司公司地址url1 url2
乔ABC 1工作巷abc.com xyz.com
xyz.com abc.com就业街1号吉尔·XYZ
因为没有规范化,所以我们把这种形式的表称为零状态形式的表。注意url1和url2字段——如果我们在应用程序中需要第三个url怎么办?因此,您必须在表中再添加一列。显然,这不是一个好主意。如果你想创建一个可扩展的系统,你应该考虑使用第一种正式形式,并把它应用到表上。
一阶归一化形式
1.消除每个表中的重复组。
2.为每组相关数据建立一个独立的表。
3.使用主键来标识每组相关数据。
上表明显违反了上面第一条的规定,那么第三条的主键是什么意思呢?很简单,它只是向每个记录添加一个新的自动添加的整数值。通过该值,可以区分两个同名的记录。通过应用第一级规范化形式,我们得到下表:
用户
用户名公司公司地址url
1乔ABC 1工作巷abc.com
1乔ABC 1工作巷xyz.com
abc.com就业街1号吉尔·XYZ 2号
xyz.com就业街1号吉尔·XYZ 2号
现在我们的表单可以说是处于形式化的第一层次,已经解决了url字段限制的问题,但是这种处理又带来了新的问题。每当我们在用户表中插入一条记录时,我们都必须重复所有的公司和用户数据。这不仅使数据库变得比以前更大,而且还容易出错。因此,它必须经过第二次规范化过程。
位律师回复
0条评论