当前位置:主页 > 军事新闻 >
军事新闻
  • 数据库设计和反范式的三种范式
  • 本站编辑:小编发布日期:2019-01-26 15:49 浏览次数:
随着新需求的增加,我们从开始到结束分析了需求,并分阶段开始开发。具体过程:
创建流程图 - 用例图 - 设计数据库 - 进入开发阶段 - 编码 - 测试 - 项目在线并且项目已完成。
我们只解释这个设计数据库的范例。
参考范式,每个人都知道第一范式,第二范式,第三范式。
但我们是否理解这些范式的深刻含义?
何时使用这些范例,使用它们有什么好处?
我们将与以下人员讨论这些问题。
所谓的英语范式:名称是NormalForm,它是英格兰的E.
F.
科德(关系数据库的祖先)总结了20世纪70年代关系数据库模型,范式是关系数据库理论的基础上,也同样的规则和关系数据库的方法。您必须遵守设计数据库结构的过程的准则
数据库设计范例是数据库设计必须满足的规范。
只有了解数据库设计范例,我们才能设计出高效,复杂的数据库。否则,您可以设计错误的数据库。
目前,可以在命令中发现的范式八:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF。
第一个范例,简称1NF是满意的。
基于第一范式,将进一步满足2NF(缩写为2NF)。
和其他人一样。
通常,仅使用前三种范例。它是第一种正常形式(1NF),第二种常规形式(2NF)和第三种正常形式(3NF)。
下面我们简要介绍这三种范式。
◆第一范式(1NF):没有重叠列。
表中的每一列都是不能分割的基本数据元素。
不符合1NF的数据库不是关系数据库。
我们来考虑这种类型的表格。[联系方式](姓名,性别,电话)如果联系人在实际场景中有特定的电话和公司电话,则表格的结构设计不会达到1NF。。
为了满足1NF,我们需要拆分列(电话),即:[联系人](姓名,性别,家庭电话号码,公司电话号码)。
1NF很明显,2NF和3NF容易混淆。
◆第二范式(2NF):属性完全取决于主键。
你必须满足的第一件事是它是1NF。此外,我们需要包括两个部分。一个是表必须具有主键,而另一个不是主键的一部分必须完全依赖主键,而不是主键的一部分。
考虑订单详细信息表:[OrderDetail](OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)。
由于您知道可以在一个订单中订购多个商品,因此仅使用OrderID成为主键是不够的。主键必须是(OrderID,ProductID)。
显然,折扣,金额是完全依赖(主键(OderID,产品ID)和单价,依赖于产品名称)仅依赖于产品ID。
因此,OrderDetail表与2NF不匹配。
不符合2NF的设计往往会产生冗余数据。
[的OrderDetail]表[的OrderDetail(订单ID,产品ID,折扣,数量)和[产品]划分(产品ID,单价,产品名称),可以防止在原始顺序表中的单价和产品名称是重复多次。
◆第三范式(3NF):根据其他非主要属性不传递属性。
第一个是满足2NF。此外,非主键列必须直接依赖于主键,而传递依赖项不能。
也就是说,非主键的列A取决于非主键的列B,非主键的列B取决于主键。
考虑订单表(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)。主键是(OrderID)。
订购日期,客户ID,客户名称,非主键列,如CustomerAddr,和CustomerCity是依赖于主密钥(订单ID),被设置为2NF。
然而,问题是,客户名称,CustomerAddr和CustomerCity是,主键而不是直接依赖,因为它直接依赖于在客户(非主键列),因为它取决于在超车时的主键,它不符合3NF。3NF是通过将[订购][订购](订单ID,订购日期,客户ID)和[客户](客户ID,客户名称,CustomerAddr,CustomerCity)至实现。
分析问题
1:第二范式与第三范式有何不同?
第二范式:(如果依靠经由间接列中的主键)列在一个非主键可取决于主键,如果有依赖关系的第二正常形式,第三在普通形式的情况下,非主键列直接依赖于主键但不能是传输类型。关系依赖。
如果这是第三范式。
2:拥有范式有什么好处?
该范例减少了数据冗余,减少了数据库空间并减少了维护数据完整性的工作量。
范式的优缺点
当范式是给以前的利润给我们,这也涉及到一些不好的位置:表按照范式的规范设计,范式的级别越高,更多的表设计。如果你可以设计你的第一个范例,那么只有一个表格。当你按照第二范式设计一个表格,你可能会显示两个或多个表。如果按照第三或更多的范例,设计这个表会带来很多的表比第二范式。
表的更大数量很大,有必要引用数据指的是数据时移动到多个表,查询时间将远长于在查询表中的所花费的时间。
换句话说,要使用较大的范例,数据操作的性能会降低。
因此,在使用模式设计表时,您需要评估是否要使用高范式的设计取决于特定需要的表。
在一个典型的项目中,我们最常使用的是第三种范式。第三范式也能够满足我们项目的需求,表现还是不错的,易于管理的数据。
如果我们的业务,其中包括大量的表,因为它往往是该表是一些人来说,应该是尽快表中创建。目前我们可以考虑使用“反范式”。
反范式
所谓反范式,那就是它的名字,是需要进行相反的模式。在预防模式设计模式下,允许适当的冗余数据,可以减少使用这种冗余操作数据的时间。
换句话说,空间用于交换时间,并且数据在多个表上是多余的。咨询时,您可以减少或避免表之间的关联。
场景分析
如果您现在计划运营学校课程,则有两个表格。一个学生信息的学生(A_ID,a_name,a_adress,B_ID),另外一个是课程(B_ID,b_subject)的主题,是nowNeed。有了这样的信息,我们将导出每门课程的课程名称和学生姓名。
SQL语句是selectB。
B_id,B
B_subject,A_a_name来自学生A,科目B;
如果上面的数据量不是很多,是没有问题的检查这种方式。如果这两个表中的数据是由数百万的数量级上,以验证以前的信息,但出现问题。即使速度比较慢,这样的查询效率,不能满足网页的速度要求(通常不能超过100毫秒)。
当然,为了对抗这种范例,在课程中添加一个冗余字段。这是学生的名字。因此,您可以使用以下查询实现相同的对象。
selectb_id,b_subject,a_namefromsubjectB;由这两个查询组合查核执行计划,92%是在第一查询的成本,所述第二查询花费8%,这意味着它是第二成本。咨询比一开始更有效,优化10次以上的结果令人惊叹。
摘要:
当我们开始研究项目时,范例的应用改变如下。
第三范例数据库设计:数据量达到百万级别的增加,它是通常操作的各种从多个表的一些数据包含的高频数据的需要。范式的数据库设计:数据网站的数量继续增长:范式的数据库设计的反范式的数据库|文献信息| J-GLOBAL科学与技术中心链接
如果数据量非常大,除了设计更改数据库,还可以缓存数据层。如果你有很多的影响Memcached的,如果你使用分布式缓存系统使用,我们将保存实体类和Memcached中的图像文件的形式在数据库中的信息。如果序列化的数据,并存储在Memcached的,你可以解压缩帧,可以随时快速访问这些对象。Memcached是,可以解决大量数据的高速缓存来保存已经被许多一致的Web服务器缓存获取的数据。