|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
让好朋友来看看,嘿,看咱写的多棒,然后再在网上宣传一下。技能|设计|数据|数据库|数据库设计 作者:allsky
在界说第四个正轨化的模式前,我想起首提一下三种根基的数据关系:一对一,一对多和多对多。咱们回头看一下经
过第一个正轨化的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_relationsswheresurl_relations.relatedUserId = 1 AND
users.userId = 1 AND urls.urlId = url_relations.relatedUrlId
假如咱们想要遍历每一个人的团体信息和url信息,咱们可以如许做:
SELECT name, url FROM users, urls, url_relationsswheresusers.userId = url_relations.relatedUserId AND
urls.urlId = url_relations.relatedUrlId
第五级正轨化模式
还有一级正轨化的模式,它其实不罕见,有点深邃,而且在大局部的情形下都是不用要的。它的准绳是:
1.本来的表格必需可以经由过程由它分别出去的表格从头构建
利用这个划定的优点是,你可以确保不会在分别的表格中引入过剩的列,一切你创立的表格布局都与它们的实践需求
一样大。使用这条划定是一个好习气,不外除非你要处置一个十分大型的数据,不然你将不需求用到它。
但愿这篇文章对你有效,而且可以匡助你在一切的项目中使用这些正轨化的划定。你能够想晓得这些办法是从哪来
的,我可以告知你,后面三个正轨化的划定是1972年,Dr. E.F. Codd在他的论文“进一步正轨化数据库的关系模子中”提
出的,其他的划定是经由后来的纠合实际和关系数学家实际化的。评论:正所谓物级必反,将表格分得细致有时其实不好,
由于如许需求将各表停止各类的联系关系,这会令查询时变得庞杂,并且效力也能够下降,这些正轨化的划定可以参考,在实
际使用时,要依据项目标巨细,需要时可以停止一些测试,以设计出更公道的表格布局。
学习如何将PHP与HTML结合起来完成简单动态页面 |
|