MariaDB社区
标题:
数据库设计技巧
[打印本页]
作者:
kider
时间:
2007-9-4 10:28
标题:
数据库设计技巧
动态网站的设计中,数据库设计的重要性不言而喻。如果设计不当,查询起来就非常吃力,程序的性能也会受到影响。无论你使用的是mySQL或者Oracle数据库,通过进行
正规化
的表格设计,可以令你的PHP代码更具可读性,更容易扩展,从而也会提升应用的性能。
简单说来,正规化就是在表格设计时,消除冗余性和不协调的从属关系。
在本文中,我将通过五个渐进的过程来告诉你在设计中应该了解的正规化技巧。从而建立一个可行而且效率高的数据库。本文也会详细分析一下可以利用的关系类型。
这里假定我们要建立一个用户信息的表格,其中要存储用户的名字、公司、公司地址和一些个人的收藏夹或url。在开始时,你可能定义一个如下的表格结构:
零状态形式
users
name company company_address url1 url2
Joe ABC 1 Work Lane abc.com xyz.com
Jill XYZ 1 Job Street abc.com xyz.com
由于没有进行任何的正规化处理,我们将这种形式的表称为零状态形式的表。留意其中的url1和url2字段---如果我们
在应用中需要第三个url呢?这样你就要在表格中多加一列,很明显,这不是一个好办法。如果你要创建一个富有扩展性的系统,你就要考虑使用第一个正规化的形式,并且应用到该表格中。
第一级正规化形式
1.消除每个表格中重复的组
2.为每套相关的数据建立一个独立的表格
3.使用一个主键来标识每套相关的数据
以上的表格明显违反了上面第一条的规定,那么第三条的主键又是什么意思呢?很简单,它只是在每个记录中加入一
个唯一的、自动增加的整型值。通过这个值,就可以将两个姓名一样的记录区分开来。通过应用第一级正规化形式,我们
得到了以下的表格:
users
userId name company company_address url
1 Joe ABC 1 Work Lane abc.com
1 Joe ABC 1 Work Lane xyz.com
2 Jill XYZ 1 Job Street abc.com
2 Jill XYZ 1 Job Street xyz.com
现在我们的表格可以说已经处在第一级正规化的形式了,它已经解决了url字段的限制问题,不过这样的处理后又带来了一个新的问题。每次在user表中插入一条记录的时候,我们都必须重复所有的公司和用户数据。这样不仅令数据库比以前大了,而且很容易出错。
因此还要经过
第二级正规化
处理。
1.为应用在多条记录的字段建立独立的表格
2.通过一个foreign key来关联这些表格的值
我们将url的值放在一个独立的表格中,这样我们就可以在以后加入更多的数据,而无需担心产生重复的值。我们还通过主键值来关联这些字段:
users
userId name company company_address
1 Joe ABC 1 Work Lane
2 Jill XYZ 1 Job Street
urls
urlId relUserId url
1 1 abc.com
2 1 xyz.com
3 2 abc.com
4 2 xyz.com
如上所示,我们创建了独立的表格,users表中的主键userid现在与url表中的foreign key relUserId关联。现在的情
况好象已经得到了明显的改善。不过,如果我们要为ABC公司加入一个员工记录呢?或者更多,200个?这样我们就必须重复使用公司名和地址,这明显不够冗余。因此我们将应用第三级正规化形式方法:
第三级正规化形式
1.消除不依赖于该键的字段
公司名及地址与User Id都是没有关系的,因此它们应用拥有自己的公司Id:
users
userId name relCompId
1 Joe 1
2 Jill 2
companies
compId company company_address
1 ABC 1 Work Lane
2 XYZ 1 Job Street
urls
urlId relUserId url
1 1 abc.com
2 1 xyz.com
3 2 abc.com
4 2 xyz.com
这样我们就将companies表中的主键comId和users表中名字为relCompId的foreign key关联起来,就算为ABC公司加入200个员工,在companies中也只有一条记录。我们的users和urls表可以不断地扩大,而无需担心插入不必要的数据。大部分的开发者都认为经过三步的正规化就足够了,这个数据库的设计已经可以很方便地处理整个企业的负担,此看法在大多数的情况下是正确的。
我们可以留意一下URL的字段--你注意到数据的冗余了吗?如果给用户用户输入这些url数据的HTML页面是一个文本
框,可任意输入的话,这并没有问题,两个用户输入同样收藏夹的概率较少,不过,如果是通过一个下拉式的菜单,只让
用户选择两个url输入,或者更多一点。这种情况下,我们的数据库还可以进行下一级别的优化--第四步,对于大多数的开
发者来说,这一步都是忽略的,因为它要依赖一个很特别的关系--一个多对多的关系,这在我们的应用中是还没有遇到过的.
作者:
longhtml
时间:
2009-5-14 22:46
ddddddddddddddd
作者:
qqdzyh
时间:
2012-7-10 17:19
清晰明了
作者:
左耳边的期盼
时间:
2016-1-15 14:26
羊角风隔代遗传吗
http://haoyy.yuqinge.com/yjyc/
得了羊角风怎么办
http://haoyy.yuqinge.com/yjzb/
治疗癫痫病的偏方
http://haoyy.yuqinge.com/zlpf/
最好的癫痫病医院
http://haoyy.yuqinge.com/zyhy/
治疗癫痫病最好的医院
http://haoyy.yuqinge.com/zyzy/
治癫痫哪家医院好
http://haoyy.yuqinge.com/yyhm/
冶癫痫病专科医院
http://haoyy.yuqinge.com/zdxy/
治疗癫痫的医院有哪些
http://haoyy.yuqinge.com/yynx/
全国最好的癫痫病医院
http://haoyy.yuqinge.com/qgyy/
中国最好的癫痫病医院
http://haoyy.yuqinge.com/yyzg/
作者:
吃醋心疼i
时间:
2016-1-25 16:43
癫痫患者饮食有哪些事项要注意
http://health.lzbs.com.cn/dianxian/ert/10970297058.html
癫痫病患者不能吃什么,癫痫病患者饮食禁忌早知道
http://health.lzbs.com.cn/yinshi/10970297114.html
癫痫病常识,患者生活中该怎样护理
http://health.lzbs.com.cn/changshi/10970297359.html
癫痫病病因会使缺钙你信吗
http://health.lzbs.com.cn/bingyin/10970297415.html
癫痫病儿童患者症状表现常见的有哪些
http://health.lzbs.com.cn/dianxian/ert/10970297570.html
癫痫病患者不能吃什么食物?
http://health.lzbs.com.cn/yinshi/10970297689.html
癫痫病常识之戒烟忌酒很重要吗
http://health.lzbs.com.cn/changshi/10970297891.html
癫痫病病因在脑您知道吗
http://health.lzbs.com.cn/bingyin/10970297930.html
避免小儿癫痫患者发作需要做些什么
http://health.lzbs.com.cn/dianxian/ert/10970298002.html
癫痫病患者不能吃的太饱
http://health.lzbs.com.cn/yinshi/10970298105.html
作者:
吃醋心疼i
时间:
2016-1-27 10:42
治疗癫痫的医院
http://health.lzbs.com.cn/dianxian/
治疗癫痫的偏方
http://health.lzbs.com.cn/dianxian/pf/
治疗癫痫的偏方
http://jkbk.thmz.com/pfzl/9853273840.html
青岛癫痫病医院
http://jiankang.zkxww.com/sddxbyy/
癫痫病怎么治
http://health.lzbs.com.cn/dianxian/zmz/10667124684.html
癫痫病怎么治
http://jkbk.thmz.com/zmz/
癫痫病医院排名
http://haoyy.yuqinge.com/dxpm/
癫痫病医院排名
http://health.lzbs.com.cn/yiyuan/7098652091.html
癫痫病医院排名
http://jkbk.thmz.com/dxyy/
癫痫病人的寿命
http://jiankang.zkxww.com/dxsm/
作者:
生死相扶
时间:
2016-1-29 10:47
癫痫病医院排名前十
http://haoyy.yuqinge.com/dxpm/
癫痫病医院排名前十
http://jkbk.thmz.com/dxyy/
癫痫病医院排名前十
http://health.lzbs.com.cn/yiyuan/7098652352.html
癫痫病医院哪家最好
http://haoyy.yuqinge.com/nlzh/
癫痫病是怎么引起的
http://haoyy.yuqinge.com/
癫痫病是怎么引起的
http://jiankang.newsyc.com/bingyin/
癫痫病是怎么引起的
http://jkbk.thmz.com/dxbby/
癫痫病人能生孩子吗
http://health.lzbs.com.cn/shengyu/
癫痫病能彻底治愈吗
http://health.lzbs.com.cn/zhiliao/10881426850.html
癫痫病能彻底治愈吗
http://jiankang.zkxww.com/zym/
欢迎光临 MariaDB社区 (http://123.56.88.72/)
Powered by Discuz! X3.2