MariaDB社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7539|回复: 6
打印 上一主题 下一主题

数据库设计技巧

[复制链接]
跳转到指定楼层
1#
发表于 2007-9-4 10:28:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  动态网站的设计中,数据库设计的重要性不言而喻。如果设计不当,查询起来就非常吃力,程序的性能也会受到影响。无论你使用的是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输入,或者更多一点。这种情况下,我们的数据库还可以进行下一级别的优化--第四步,对于大多数的开
发者来说,这一步都是忽略的,因为它要依赖一个很特别的关系--一个多对多的关系,这在我们的应用中是还没有遇到过的.
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 顶 踩
2#
发表于 2009-5-14 22:46:57 | 只看该作者
ddddddddddddddd
3#
发表于 2012-7-10 17:19:47 | 只看该作者
清晰明了
4#
发表于 2016-1-15 14:26:52 | 只看该作者
羊角风隔代遗传吗 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/
5#
发表于 2016-1-25 16:43:23 | 只看该作者
癫痫患者饮食有哪些事项要注意 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
6#
发表于 2016-1-27 10:42:27 | 只看该作者
治疗癫痫的医院 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/
7#
发表于 2016-1-29 10:47:15 | 只看该作者
癫痫病医院排名前十 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/
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|MariaDB社区 ( 京ICP备07012489号    |
业务联系: QQ:48474881; 邮箱: 48474881@qq.com; 电话:13911732319
声明:本站部分文章是网友转载,若未经作者同意或署名有误,请联系网站管理员。

GMT+8, 2024-11-25 09:59 , Processed in 0.062857 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表