注意代价高的关系

留意数据模子中的关系。在设计数据模子时,添加表和列时,或者编写查询时,要从久远角度斟酌实体间的关系若何影响机能和可扩大性的情况。在设计数据模子时,要斟酌到未来的数据库朋分和其他可能的数据需求。在实现了数据模子后,才发明它有问题,此时修复的成本很高,可能是设计阶段修复它的成本的100倍。事先斟酌好,细心谋划数据模子。要采取范式,斟酌未来可能若何朋分数据库及运用可能有哪些需求。

在生涯中,除非我们是受虐狂,不然都邑尽力树立和保护均衡的关系。幻想情形下,我们在关系中投人的与我们获得的根本一样多。当段人际关系倾斜向某小我了,那么另一方就会不愉快,从而从新评估这段关系,可能就此停止它。固然本书不是讲人际关系的,但在人际关系中存在的支付=回报的等式同样实用于数据库中的关系。

数据库关系是由数据模子决议的,而数据模子抓住了数据的基数和参照完全性规矩。要懂得这是若何实现的,以及为什么它如斯主要,就须要懂得构建数据模子须要的基本步调,这些步调将生成数据界说说话DDL)的可,即表和列。固然这一流程有许多变体,但对于关系模子来说,第一步平日都是界说实体

实体可所以自力存在的任何器械,如物理对象、事宜或概念。实体之间可以存在关系,实体和关系都可以具有描写它们的属性。打个比喻,实体就是名词,关系就是动词,润饰实体的属性就是形容词,润饰关系的属性就是副词。

实体可所以某个事物的实例,例如客户的订单,可以具有订单ID和总价如许的属性。把同种类型的实体聚集起来就形成了实体集。在数据库中,实体相当于表中的一行,而实体集相当于表。描写实体特有属性的是表的主键。主键经由过程独一标识实体的实例实现了实体完全性。外键描写实体间关系的特有属性。外键把分歧实体集中的两个实体联系关系在起,从而实现了弓引用完全性。最常用的实体、关系和属性的图解表现法是实体关系图(ERD)。ERD展现了实体集间的根本关系,是一对一对多照样多对多

一旦界说和映射了实体、关系和属性,设计数据模子就剩下最后一步了:规范化。规范化数据模子的重要目标是,确保留储数据的方法许可在包管数据完全性的情形下对数据进行插入、更新选择和删除的操作傾即CRUD,CreateReadUpdateDelete)不规范的数据模子具有高度的数据冗余,这意味着数据完全性问题的风险更年夜。范式是逐级构建的,这意味着知足第二范式的数据库也必需知足第一范式。下面的弥补解释介绍了最常见的范式。假如一个数据库至少知足第三范式,就可以以为它是规范的。

范式

下面是数据库中常用的范式。知足高等范式注解必需知足初级范式。平日,假如数据库知足第三范式,我们就说它是规范的。

口第一范式。依照Codd的界说,表最初应当表现一个关系且表中没有反复的分组。固然Codd具体界说了“关系”,然则“反复的分组”这个概念仍然引起了争议。争辩的内容有是否许可表中存在表,是否许可域为空。最主要的概念是可以或许创立一个主症结字。

口第二范式。所有非主症结字域都不克不及只依附于组合症结字的部门。

口第三范式。所有非主症结字城必需依附于主症结字。Boyce-Cod范式。每个决议身分都是候选的症结字。

口第四范式。一种记载类型中不存在多值依附。

口第五范式。表中的每个非平常衔接依附都是由候选主症结字决议的。

口第六范式。不存在非平常衔接依附。

前三种范式的轻便记忆法是“1-一主症结字,2一完全的主症结字3一只能依附于主症结字”。

你可能已经想到了,实体间的关系会对数据存储、提取和更新的有用性发生伟大的影响。因为这些关系界说了若何朋分和共享数据库,所以它们在扩大中也饰演侧重要的脚色。假设我们想依据订单确确认办事对数据库进行Y轴朋分,那么假如订单实体与其他实体关系慎密,那么这种朋分就可能造成问题。在朋分之后再试图理清这种关系网很艰苦。在设计阶段多消费点儿时光,在朋分数据库时就只须要消费本来的1/10甚至1/100的精神。

对于扩大性来说,数据关系的最后一个症结点是在查询中若何衔接表。当然,这不仅是由数据模子界说的,也是由在运用中创立报表和新页面的开辟人员界说的。这里我们不是要具体介绍优化查询的步调,要说的是新的查询都应当由熟习数据模子且才能根强的DBA申貸,在把们投入到临盆情况之前,还要剖析机能方面的特点。

你可能已经留意到了,在经由过程规范化进步数据完全性的欲望和在数据库中应用的关系水平之间是有关系的。采取的范式越高,在创立表时的关系越多,对反复的值这种情形尤其如斯。在数据库设计方面,几年前被看成原则应用的器械(即采取的范式越高越好),如今年夜型生意业务体系设计时,都要进行衡量了。这种衡量与风险和成本、成本和质量、时光和成本等之间的衡量是类似的,即一方的降低平日会导致另一方的上升。平日,要进步可扩大性,我们会下降采取的范式。

因为要衔接表,所以SQL査询很慢,可以采取以下几种办法解决。起首是对查询进行调优。假如这种办法无效,另一种办法是创立视图、物化视图、摘要表等,可以对衔接进行预处置。还有一种办法是不要在査询中进行衔接,而是把数据集读到运用中,在运用的内存中进行衔接。固然这种办法比拟庞杂,但在数据库中进行衔接平日是最难扩大的,而该办法把衔接移出了数据库,放在运用办事器层上,那么用更多的商用硬件进行程度扩大会更轻易一些。最后一个方法是追溯到营业需求上。平日,我们的营业合作伙伴会提出分歧的解决计划,在说明时会说,现有的要求报表的办法须要增长10%的硬件,而删除一行会减小报表的庞杂度,而获得的网站设计营业价值根本是雷同的。

相關文章: