加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 电商 > 正文

数据库正规化和计划能力

发布时间:2018-09-02 18:50:04 所属栏目:电商 来源:站长网
导读:在动态网站的计划中,数据库计划的重要性不问可知。假如计划不妥,查询起来就很是吃力,措施的机能也会受到影响。无论你行使的是mySQL可能Oracle数据库,通过举办正规化的表格计划,可以令你的PHP代码更具可读性,更轻易扩展,从而也会晋升应用的机能。 简朴
在动态网站的计划中,数据库计划的重要性不问可知。假如计划不妥,查询起来就很是吃力,措施的机能也会受到影响。无论你行使的是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 keyrelUserId关联。此刻的环境好象已经获得了明明的改进。不外,假如我们要为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的foreignkey关联起来,就算为ABC公司插手200个员工,在companies中也只有一笔记录。我们的users和urls表可以不绝地扩大,而无需担忧插入不须要的数据。大部门的开拓者都以为颠末三步的正规化就足够了,这个数据库的计划已经可以很利便地处理赏罚整个企业的承担,此观点在大大都的环境下是正确的。

  我们可以寄望一下url的字段--你留意到数据的冗余了吗?假如给用户用户输入这些url数据的HTML页面是一个文本框,可恣意输入的话,这并没有题目,两个用户输入同样保藏夹的概率较少,不外,假如是通过一个下拉式的菜单,只让用户选择两个url输入,可能更多一点。这种环境下,我们的数据库还可以举办下一级此外优化--第四步,对付大大都的开拓者来说,这一步都是忽略的,由于它要依靠一个很出格的相关--一个多对多的相关,这在我们的应用中是还没有碰着过的。 数据相关

  在界说第四个正规化的情势前,我想起首提一下三种根基的数据相关:一对一,一对多和多对多。我们转头看一下颠末第一个正规化的users表。要是我们将url的字段放在一个独立的表中,每次在users表中插入一个记录,我们就会在urls表中插入一行。我们将获得一个一对一的相关:用户表中的每一行,都将在urls表中找到响应的一行。对付我们的应用来说,这既不适用也不尺度。

  然后看看第二个正规化的例子。对付每个用户记录,我们的表格应承有多个urls的记录与之关联。这是一个一对多的相关,这是一个很常见的相关。

  对付多对多的相关来说,就有点伟大了。在我们的第三个正规化情势的例子中,我们的一个用户与许多的url有关,而我们想将该布局变为应承多个用户与多个的urls有关,这样我们就可以获得一个多对多的布局。在接头前,我们先看看表格布局会有些什么变革

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 url 1 abc.com 2 xyz.com

url_relations relationId relatedUrlId relatedUserId 1 1 1 2 1 2 3 2 1 4 2 2

  为了进一步减低数据的冗余,我们运用第四级正规化情势。我们建设了一个颇稀疏的url_relations表,内里的字段均为主键可能foreign key。通过这个表,我们就可以消除urls表中的一再项目。以下是第四个正规化情势的详细要求:

第四个正规化情势

1.在一个多对多的相关中,独立的实体不能存放在统一个表格中

  因为它仅应用于多对多的相关,因此大大都的开拓者可以忽略这条划定。不外在某些环境下,它长短常适用的,这个例子就是这样,我们通过将沟通的实体疏散出来,而且将相关移到它们本身的表格中,从而改造了urls表格。

为了令你更轻易大白,我们举个详细的例子,以下将用一个SQL语句选择出全部属于joe的urls:

SELECT name, url FROM users, urls, url_relations WHERE url_relations.relatedUserId = 1 AND users.userId = 1 AND urls.urlId = url_relations.relatedUrlId

假如我们想要遍历每小我私人的小我私人书息和url信息,我们可以这样做:

SELECT name, url FROM users, urls, url_relations WHERE users.userId = url_relations.relatedUserId AND urls.urlId = url_relations.relatedUrlId

第五级正规化情势

尚有一级正规化的情势,它并不常见,有点深奥,而且在大部门的环境下都是不须要的。它的原则是:

1.原本的表格必需可以通过由它疏散出去的表格从头构建

  行使这个划定的甜头是,你可以确保不会在疏散的表格中引入多余的列,全部你建设的表格布局都与它们的现实必要一样大。应用这条划定是一个好风俗,不外除非你要处理赏罚一个很是大型的数据,不然你将不必要用到它。

  但愿这篇文章对你有效,而且可以辅佐你在全部的项目中应用这些正规化的划定。你也许想知道这些要领是从哪来的,我可以汇报你,前面三个正规化的划定是1972年,Dr. E.F. Codd在他的论文“进一步正规化数据库的相关模子中”提出的,别的的划定是经事其后的集公道论和相关数学家理论化的。评述:正所谓物级必反,将表格分得详尽偶然并欠好,由于这样必要将各表举办各类的关联,这会令查询时变得伟大,并且服从也也许低落,这些正规化的划定可以参考,在现实应用时,要按照项目标巨细,须要时可以举办一些测试,以计划出更公道的表格布局。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读